关于JAVA中equal的使用方法有哪些?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于JAVA中equal的使用方法有哪些?相关的知识,希望对你有一定的参考价值。

//Equals2.java
class Integer
private int i;
public Integer(int i)
this.i=i;


public class Equals2

public static void main(String[] args)

Integer n1=new Integer(100);
Integer n2=new Integer(100);
System.out.println(n1==n2);
System.out.println(n1.equals(n2));



为什么程序最后一句运行结果是false呀?

n1和n2是两个变量,虽然他们的值都为100,但是它们在内存中的地址不一样,而equals判断的是n1和n2两个变量的地址值,所以不一样。我根据你写的程序把n1和n2的值打印出来了,你看下就知道了。

参考技术A 因为你的Integer类没有重写equals方法, 所以调用的是父类的equals方法, 也就是Object的equals, 而查看Object的源码可以看到
public boolean equals(Object obj)
return (this == obj);

相当于 n1==n2, 比较的是引用地址, 所以是false追问

public class Equals

public static void main(String[] args)

Integer n1=new Integer(100);
Integer n2=new Integer(100);
System.out.println(n1==n2);
System.out.println(n1.equals(n2));

追答

请问你的这个有啥疑问

参考技术B equals判断的是:是否有相同引用。
这两个是两个独立的对象,没有相同的引用。
如果你加上一句n1=n2,再equals判断就是true。因为n1引用了n2.

另外的例子,你建两个List(util包里的),分别在里面放上相同的数据,用equals判断也是false。
参考技术C equals 主要是用来判断String的 对于Int类型的数据 是用== 判断的
因为这是两个对象,他们的hashCode不同,所以不能单单使用equals判断相等
通常需要 重写equals方法做特殊处理。
我也就知道这么一点, 你可以打印一下他们的hashCode 就知道了。
希望对你有帮助。

在java中,关于equals(),和hashCode()的重写问题。

在java中,在集合类,关于equals()的重写,在equals(Object obj ),为什么要用Object来调用。不用其他的变量。还有hashCode()的重写问题,请大侠们给点详细的解释啊

java中所有类都是object的子类,子类拥有父类非私有的变量和方法因此不光可以用object调,所有java对象都可以调用equal方法。追问

那hashCode()呢?这个我不是很理解额

追答

hashcode是根据hash算法为每个散列在内存中对象生成一个标示码,当你实现hashcode方法时要考虑 你生成的hash值是否能和其他对象进行区分。看看think in java 都有

参考资料:think in java

参考技术A object更高级 是他们的父类对象 参考技术B object是所有类的基类

以上是关于关于JAVA中equal的使用方法有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

关于java中equals方法的疑惑

在java中,关于equals(),和hashCode()的重写问题。

关于JAVA 中的DOM操作

关于JAVA核心技术(卷一)读后的思考(equals方法的讨论)

java集合

java容器中关于equals的重写