1. ==
java中==运算符用来比较运算符两端的操作数是否相等,两端操作数值相等,返回true;操作数值不等,返回false。有切仅有这一条规则,根据这条规则来判断以下表达式的值。
1.1 两端为相同类型的基本类型
int a = 3;
int b = 3;
System.out.println(a == b); //返回true,运行时基本类型存储在栈中,固a和b的值都是3,所以返回true
1.2 两端为不同类型的基本类型
int a = 1;
float b = 1.0f;
System.out.println(a == b); //返回true,两个操作数同为基本类型但是类型不相同,比较时会先将取值范围小的类型转换为取值范围大的类型,再进行比较
1.3 两端为对象
String a = new String("a");
String b = new String("a");
System.out.println(a == b); //返回false,运行时对象存储在堆中,对象的引用存储在栈中,a和b的值是对象的引用,不同对象的引用不同,所以返回false
2. equals
equals是Object对象的方法,每个类都可以有自己的实现。下面贴出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;
}