首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么比较我的两个类返回false?

为了给出完善且全面的答案,首先需要了解问题的背景和具体情况。根据提供的问答内容,问题是关于比较两个类返回false的原因。下面是一个可能的解答:

在比较两个类返回false的情况下,可能存在以下几种可能的原因:

  1. 对象引用不同:如果两个类的比较是通过对象引用进行的,那么当两个类的对象引用不同的时候,比较的结果会返回false。这是因为对象引用不同表示两个对象在内存中的位置不同,即使它们的属性值相同,也会被认为是不同的对象。
  2. equals方法未重写:在Java中,如果没有重写equals方法,默认会使用Object类中的equals方法进行比较。Object类中的equals方法是通过比较对象的引用来判断是否相等的,而不是比较对象的属性值。因此,如果两个类没有重写equals方法,那么比较的结果可能会返回false,即使它们的属性值相同。
  3. equals方法重写不正确:如果两个类重写了equals方法,但是重写的逻辑不正确,比如没有正确比较对象的属性值,那么比较的结果可能会返回false。在重写equals方法时,应该根据类的属性值来判断两个对象是否相等。
  4. hashCode方法未重写:在Java中,如果重写了equals方法,通常也需要重写hashCode方法。hashCode方法用于计算对象的哈希码,而哈希码在比较对象是否相等时起到了重要的作用。如果两个类的hashCode方法没有正确重写,那么比较的结果可能会返回false。

综上所述,比较两个类返回false的原因可能是对象引用不同、equals方法未重写或重写不正确、hashCode方法未重写等。在具体分析问题时,需要查看代码实现并检查以上可能的原因。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

奇怪Java题:为什么128 == 128返回false,而127 == 127会返回为true?

奇怪Java题:为什么128 == 128返回false,而127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer对比,一步步揭开问题答案。...2. int与Integer深入对比 注:对于引用类型变量,==操作符比较两个引用是否指向同一个对象;对于基本类型变量,==操作符比较两个变量值是否相等。...Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j); //false 因为new生成两个对象...,其内存地址不同 (2) Integer变量和int变量比较时,只要两个变量值是相等,则结果为true。...,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量比较 (3) 非new生成Integer变量和new Integer()生成变量比较时,结果为false

2.2K31

为什么使用不了了?

【分析】:这个错误比较明显,图中将“TestClass2”写在了 “TestClass1”中,在使用中是不允许出现嵌套,否则就是我们常说”,必须杜绝这样编程失误。...错误情况2 在同一项目中使用“TestClass2”这个时出现错误。 【分析】:“TestClass1”中只有一个方法,没有其他,所以不存在“情况。...仔细观察,发现Program 命名空间为 “thinger.com” ,而“TestClass1”命名空间为 “thinger.com.cn”,两者命名空间不一致。...解决方案 将名改为 “TestClass1”即可。 错误情况4 在调用库中“TestClass”这个时出现错误。 【分析】:无法调用库中时,可能是由于没有在项目中将库引用进来。...在解决方案下找到要添加引用库,点击确定,将库引用进来。  最后在代码中引用库,问题解决。

69630

为什么两个表建立数据关系有问题?

小勤:大海,为什么两个简单表建立数据关系有问题啊? 大海:啊?出什么问题了?...看看: 小勤:真的嘢!里面有两个小米,一个是宏仁生产,一个是德昌生产。但是,产品名称重复不行吗? 大海:当然不行啊,你产品名称是重复怎么知道订单明细表里产品应该对应你产品表里哪一个啊?...让这两个小米要打一架?谁赢算谁? 小勤:那用vlookup都不会出错,能查到结果啊! 大海:那你能保证用vlookup查到结果是你想要吗?...小勤:啊,也对,vlookup都是返回最先找到一个,这可能是错。 大海:所以说,仔细想想,这种逻辑是不能成立。...小勤:啊,知道了,看来还是得把订单明细表里产品ID放出来,不然做出来数据分析都是不对。 大海:很棒,这么快就想到产品ID问题了。

1.1K20

一个如何实现两个接口中同名同参数不同返回函数

假设有如下两个接口: public interface IA {     string GetA(string a); } public interface IB {     int GetA(string... a); } 他们都要求实现方法GetA,而且传入参数都是一样String类型,只是返回值一个是String一个是Int,现在我们要声明一个X,这个要同时实现这两个接口: public class... X:IA,IB 由于接口中要求方法方法名和参数是一样,所以不可能通过重载方式来解决,那么我们该如何同时实现这两个接口拉?...解决办法是把其中不能重载方法直接写成接口方法,同时要注意这个方法只能由接口调用,不能声明为Public类型.所以X定义如下: public class X:IA,IB {     public...IB.GetA(string a)//实现IB接口     {         Console.WriteLine("IB.GetA");         return 12;     } } 同样如果有更多同名同参不同返回接口

2.9K20

Momentdiff方法两个日期正反比较值大小竟然不同?看完算法原理,原来是天真了

问题 大家好,是数据里奥斯,今天有一段业务逻辑需要判断选择时间范围不能超过3个月,这种常规比较用moment.jsdiff方法不是手到擒来么?...干嘛这样说自己)来看看下面各位大神是怎么教他做人。。。...Return P1M30D 看完这一段,豁然开朗,拿我们今天遇到实际case,讲一下他解释这段原理到底是怎么实现: diff算法是先加或者减每个整月一直到不能减,然后再看剩下天数和当月比较百分比...结论 所以,moment.jsdiff方法在比较以天/月份/年份这样特殊粒度单位时,都会优先按照整粒度扣除,剩下小数部分,是根据子一级粒度取当年/月/日为参照按比值算出,这才有了这种A比B值和...虽说一般来讲这个值多一点少一点不会有影响,毕竟我们是按找自己规定粒度来比较,但是这种原理能整明白,也不失为一种“学到了”收获,嘿嘿 是数据里奥斯~

69010

JavaBean,为什么要重写hashCode()方法和equals()方法及如何重写

现在想一想归根到底还是对这两个理解不深刻,现在特定来总结下.hashCode 方法用于散列集合查找,equals 方法用于判断两个对象是否相等。...我们所知道JavaBean(父)是Object,JavaBean中equals方法是继承自Object中方法.Object中定义equals()方法是用来比较两个引用所指向对象内存地址是否一致...()方法 ,所以默认比较是地址值,从而输出结果为false*/ } } 那么为什么在重写equals方法时候需要重写hashCode方法呢?...如果两个对象equals()返回值为true,则他们hashCode()也必须返回相同int值. 如果两个对象equals()返回值为false,则他们hashCode()返回值也必须不同....以HashSet来说明为什么要这么约定:HashSet存放元素时,根据元素hashCode值快速找到要存储位置,如果这个位置有元素,两个对象通过equals()比较,如果返回值为true,则不放入;

93130

如何编写出高质量 equals 和 hashcode 方法?

为什么需要重写 equals 方法和 hashcode 方法,想主要是基于以下两点来考虑: 1、我们已经知道了 Object 中 equals 方法是用来判断两个对象引用是否相同,但是有时候我们并不需要判断两个对象引用是否相等...比如对于两篇文章来说,只要判断两篇文章链接是否相同,如果链接相同,那么它们就是同一篇文章,并不需要去比较其它属性或者引用地址是否相同。...article.url); } 再一次运行 Main 方法,你会发现还是 False ,这是为什么呢?...:对于任何非空引用 x 和 y,如果在 equals 比较中使用信息没有修改,则 x.equals(y) 多次调用必须始终返回 true 或始终返回 false 非空性:对于任何非空引用 x,x.equals...,个人比较喜欢用官方东西,觉得他们考虑肯定比我们多很多,所以我们 Article hashcode 方法就可以这样写 /** * 重写 hashcode方法,根据url返回

83760

如何编写出高质量 equals 和 hashcode 方法?

为什么需要重写 equals 方法和 hashcode 方法,想主要是基于以下两点来考虑: 1、我们已经知道了 Object 中 equals 方法是用来判断两个对象引用是否相同,但是有时候我们并不需要判断两个对象引用是否相等...比如对于两篇文章来说,只要判断两篇文章链接是否相同,如果链接相同,那么它们就是同一篇文章,并不需要去比较其它属性或者引用地址是否相同。..., article.url); } 再一次运行 Main 方法,你会发现还是 False ,这是为什么呢?...:对于任何非空引用 x 和 y,如果在 equals 比较中使用信息没有修改,则 x.equals(y) 多次调用必须始终返回 true 或始终返回 false 非空性:对于任何非空引用 x,x.equals...,个人比较喜欢用官方东西,觉得他们考虑肯定比我们多很多,所以我们 Article hashcode 方法就可以这样写 /** * 重写 hashcode方法,根据url返回

61350

​第3章 对于所有对象都通用方法

有时间的话,多看看书吧~ oh,另外,公众号也有了赞赏功能,还记得以前有同学给我留言说为什么没赞赏功能,哈哈,现在有了,如果你愿意支持的话,非常欢迎,如果你不想有"肮脏py交易的话",也没有关系啦...true 一致性(consistent) 对于任何非null引用值x和y,只要equals比较操作在对象中所用信息没有被修改,多次调用x.equals(y)就会一致地返回true,或者false...对于任何非null引用值,x,x.equals(null)必须返回false 感觉又回到了学数学交换律什么时候了~ 有些(如集合,HashMap)与equals方法息息相关,所以重写时候要仔细小心...如果两个对象根据equals方法比较是相等,那么调用这两个对象中任意一个对象hashCode方法都必须产生同样整数结果....(即equals相等,那么hashCode一定相等,需要注意是,反过来不一定成立,即hashCode相等不代表equals相等) 如果两个对象根据equals方法比较是不相等,那么调用这两个对象中任意一个对象

51020

他连哈希扣都不懂

所以,如果一个对象 equals 不重写的话,和 == 效果是一样。 我们知道,当创建两个普通对象时,一般情况下,它们所对应内存地址是不一样。例如,定义一个 User 。...false 很明显,zhangsan 和 lisi 是两个人,两个不同对象。...按我们理解,这虽然是两个对象,但是应该是指同一个人,都是张三。但是,打印结果,如下: ? 这有悖于我们认知,明明是同一个人,为什么 equals 返回却不相等呢。...= o.getClass()) return false; User user = (User) o; //比较两个对象中所有属性,即name和age都必须相同,才可认为两个对象相等...如果需要让两个对象内容相同时,equals 返回 true,则需要重写 equals 方法。 为什么要重写 equals 和 hashCode ?

72820

equals() ? ==? hashCode()? 今天就把你们都认识清楚

hashCode 和 equals 关系? 为什么每个覆盖了equals方法中,也必须覆盖hashCode方法?...=适用所有对象,但是这两个操作符通常在比较对象时候会出问题: 在这里==和!=比较是对象引用。尽管对象内容相同,但是对象引用却是不同,说以n1==n2是false。...= 0) {//逐个字符比较,若有不相等字符,返回false if (v1[i] !...(容忍空指针),用于计算对象hashcode、返回对象字符串表示形式、比较两个对象。...在默认情况下,对象equals方法没有重写 调用是Object中equals方法 那么我们来写个报错例子: A a = null;//假设接收到config对象,并不知道是否为空

43450

Stack Overflow 上 370万浏览量一个问题:如何比较 Java 字符串?

我们来回顾一下提问者问题: 截止到目前为止,一直使用“==”操作符来比较字符串,直到程序出现了一个 bug,需要使用 .equals() 方法来解决。这是为什么呢?...和提问者相反,在刚开始学习 Java 时候,比较字符串一直使用是 .equals() 方法,因为不管是书本还是老师,都告诫不要直接使用“==”操作符来比较,会出 bug。...至于为什么,书本和老师都没有帮我搞清楚。 那借此机会,就来梳理一下 Stack Overflow 上高赞答案,我们来一起学习进步,打怪升级。...“==”操作符用于比较两个引用(内存中存放地址)是否相等,它们是否是同一个对象。 .equals() 用于比较两个对象内容是否相等。 怎么理解这两句话呢?来举个不恰当又很恰当例子。...第三种: new String("小萝莉") == new String("小萝莉") // --> false new 出来两个对象肯定是不相等,所以返回 false

48030

【Java提高十二】hashCode()equals()

通过这步可以直接定位某个对象位置,所以从理论上来说我们是完全可以利用hashCode直接定位对象散列表中位置,但是为什么会存在一个key-value键值对,利用keyhashCode来存入数据而不是直接存放...= v2[j++])return false;我们可以非常清晰看到Stringequals()方法是进行内容比较,而不是引用比较。至于其他封装都差不多。...4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用信息没有被修改。...至于6)、7)为什么需要进行转换,我们可以参考他们相应封装equals()方法,下面的是Float: ? 原因嘛,里面提到了两点: ?...=e2我们非常容易理解,因为他们不仅需要比较name,还需要比较id。但是p1即等于e1也等于e2,这是非常奇怪,因为e1、e2明明是两个不同,但为什么会出现这个情况?

76740

为什么Java中“1000==1000”为false,而”100==100“为true?

在日常编程中,我们经常遇到一些看似简单却隐藏着复杂逻辑问题。 比如,你是否想过为什么在 Java 中表达式1000==1000会返回 false,而 100==100 却返回 true 呢?...3、解答问题 看懂了源码,在回到上面的问题,为什么表达式1000==1000会返回 false,而 100==100 却返回 true 呢?...当我们使用 Integer 对象比较两个数时,实际上是在比较对象内存地址。由于“100”在缓存范围内,两个“100”实际上引用是同一个对象,所以返回 true。...相反,“1000”不在缓存范围内,即使数值相同,两个“1000”也是不同对象,因此内存地址不同,返回 false。...4、正确比较 其实对于 Integer 这种包装类比较大小,我们应该使用 equals() 方法来比较两个 Integer 对象数值,而不是直接使用 == 操作符,除非我们确实想比较对象引用。

14110

Java HashCode详解

一、为什么要有Hash算法 Java中集合有两,一是List,一是Set。List内元素是有序,元素可以重复。Set元素无序,但元素不可重复。...1.hashcode是用来查找,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样位置 0 1 2 3 4 5 6 7 而我有个,这个有个字段叫ID,要把这个存放在以上...2 如果两个对象hashCode相同,它们并不一定相同,这里对象相同指的是用eqauls方法比较。...值不同(注意,上述代码也许在某些情况下会得到相同hashcode值,不过这种概率比较小,因为虽然两个对象存储地址不同也有可能得到相同hashcode值),所以导致直接返回null。...0 :name.hashCode()); return result; } 结果: true 要得到刚刚对象 Student 1 实际上,由 Object 定义 hashCode 方法确实会针对不同对象返回不同整数

4K50

java中那些让你傻傻分不清楚小细节

除了常规bug和安全漏洞之外,还有几处方法用法错误,引起了极大兴趣。为什么会对这几个方法这么感兴趣呢?因为它们极具迷惑性,可能会让我们傻傻分不清楚。 1. replace会替换所有字符?...不知道你在项目中有没有见过,有些同事对Integer类型两个参数使用==比较是否相等? 反正见过,那么这种用法对吗? 回答是看具体场景,不能说一定对,或不对。...StringUtils.isBlank(" bob ") = false 两个方法关键区别在于这种" "空字符串情况,isNotEmpty返回false,而isBlank返回true。...但是,这里比较特殊,查了一下mybatis源码,这个判空代码还真的可以去掉。 怎么回事呢?...答案是否定为什么呢? jdk官方说了不存在情况会返回-1 ? indexOf方法返回是指定元素在字符串中位置,从0开始。

58531
领券