如何判断两个对象的值是不是相等java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断两个对象的值是不是相等java相关的知识,希望对你有一定的参考价值。

参考技术A 判断两个值是否相等,可以使用=比较地址,equals比较内容。如果比较的是数字,必须使用=比较。 参考技术B 这个类是什么样的类,比较类的对象,一般比较的是对象的属性,这样的话就可以在类里面写个CompareTo(XXX X)方法

为啥java 里要判断两个对象是不是相等呢?

我是新手,现在学习到比较对象了。在网上找了找,都是教怎么用equal 方法比较对象相等的,我不明白的是为什么继承里要比较对象相等呢?
有一个父类,一个子类
当子类继承父类的时候,要放一个equal 方法比较对象是否相等
我的问题是:
1,为什么要比较对象相等?
2. 比较哪两个对象相等?父类子类里所有相同的对象么?还是子类里重写了哪个对象,就比较哪个对象在父类的相等?

你是不是想说为什么要重写equals方法?在我回答你问题之前,我想说:一个标准的实体类的4大基本规则:1.封装(属性私有化,分别提供对应的get与set方法等),2、提供无参构造 ,3、重写:toString(),equals(),hashCode()这3个方法,4、实现java.io.Serializable接口!

这是你就正好要问为什么要重写这3个方法,先说equals,重写它就是为了以后比较对象是否相等,比如你问题中的假如父类是person,子类是student,那么当我们new了几个student后,在程序中怎么去判断这几个 student实例是否是同一个学生呢?别告诉我用“=”去判断!这时如果我们的student重写了equals(比如你按照学号来比较),那么你就可以用S1.equals(S2)来比较了。至于hashCode,那是因为假如我们存取数据时 是存放在键值对中时(比如Map),这时候光靠equals效率不高,这时候用对象的哈希码(即hashCode方法得到的)来查找和比较更快,所以一般重写equals方法必须重写hashCode方法,因为java规定相等的对象必须有相等的哈希码!最后重写toString方法会让你打印和输出变得更顺利 等等。。。。。。高级QQ群:143551456诚邀爱交流的java初学者
参考技术A 这是面向对象的特性
由于java‘是纯面向对象语言,所以对对象的管理都是用自动分配的HashCode进行管理,这样的话用普通的“==”自然就不能解决问题。
试想一下,两个不同HashCode的String类型,拥有相同value的变量他们能是相等的么?
从对象的角度而言,肯定是不相等的。因为他们从直接寻址的角度而言,根本就是存储在不同地址的两个东西,但是他们在偏移地址上存储的分量value是相同的,从某种程度上来说有证明这两个String变量其实描述的是同一个东西。
如何让开发人员区分这两个情况,java想了一个比较好的方法
它用==来判断对象的HashCode相同的情况,同时提供了一个可重写的方法equals让程序员自定义判断两个对象实际相等的条件。
正如:
String s1 = new String("1");
String s2 = new String("1");
String s3 = s1;
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1==s3);
System.out.println(s1.equals(s3));

结果是什么呢?自己想啦
参考技术B 首先你弄错了,比较对象没有为什麼。equal只适合字符串比对
对象类型比较默认是比 内存地址(如:0x2652ds)
对象比较要实现Comparable的方法,比较对象的属性,
具体的说不清楚。
找个人指导下你吧。
参考技术C 1、比较对象相等在条件判断时用到。
2、比较的是你定义的对象,如果是在子类中定义的话,就是重写的equals方法。
参考技术D 不晓得

以上是关于如何判断两个对象的值是不是相等java的主要内容,如果未能解决你的问题,请参考以下文章

如何判断两个实体是不是相等?

js判断两个对象的值是不是相等

判断两个数组是不是相等

为啥java 里要判断两个对象是不是相等呢?

JS判断两个对象内容是不是相等

java中如何判断两个变量相等