Java 中的 8 种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。
equals() 方法是 Object 类的一个方法,Java 当中所有的类都是继承于 Object 这个超类。
JDK1.8 Object 类 equals() 方法源码如下,即返回结果取决于两个对象的使用 == 判断结果。
public boolean equals(Object obj) {
return (this == obj);
}
在实际使用中,一般会重写 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() 方法(重写 equals() 方法,一般须重写 hashCode() 方法)。
PS:可以延伸自己写代码比较一个基本类型的包装类对象使用 == 和 equals() 进行比较的结果,会涉及到 JVM 对部分基本类型的常用值的缓存。
ConstXiong 备案号:苏ICP备16009629号-3