== 和 equals 的区别是什么?
使用 == 比较
Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。
引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。
使用 equals 比较
equals方法是Object类的一个方法,Java当中所有的类都是继承于Object这个超类。
JDK1.8 Object类equals方法源码如下,即返回结果取决于两个对象的使用==判断结果。
public boolean equals(Object obj) { return (this == obj); }
在实际使用中,一般会重写定义的class的equals方法,如JDK1.8 java.lang.String类的equals源码如下。
即两个字符串使用 == 相等 或者 两个字符串的所有组成字符都相等返回true,其他情况返回false。这里就定义String根据equals方法判断是否相等的逻辑。
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
总结:
== 的作用:
基本类型:比较值是否相等
引用类型:比较内存地址值是否相等
equals 的作用:
引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。
————————————————
版权声明:本文为CSDN博主「ConstXiong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://blog.csdn.net/meism5/...