== 和 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/…