1.对于“==”:
①如果比较的是基本数据类型,则比较的是两者的值是否相等;
②如果比较的是引用类型,则比较的是两个引用对象所指向的地址。
2.对于“equals”:
①equals不能作用于基本数据类型的变量;
②equals若未进行重写,则指向的是变量的地址。
③equals若进行了重写,则往往指向的是对象所指的内容。
先来看equals在Java的基类中的定义:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是使用的“==”,也就是我们一开始所说的对变量的地址进行比较。
在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;
}
地址相等,或者值相等的时候返回true。
测试:
public class Test {
public static void main(String[] args) {
String a = "123";
String b = "123";
String s1 = new String("123");
String s2 = new String("123");
int m = 1;
int n = 1;
System.out.println(a == b);
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
true
false
true