==对比的是栈中的值。栈中保存的是基本数据类型变量,和对象的引用。所以==两边如果是基本数据类型,则比较的是变量值,==两边如果是引用类型,则比较的是堆中对象的内存地址。java有8中基本数据类型,byte,short,int,long,float,double,boolean,char。
在String.java
的equals()方法中,可以推测出char类型的值,可以直接用==比较。
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]) //从这里可以推测出char类型的值,可以直接用==比较
return false;
i++;
}
return true;
}
}
return false;
}
验证一波
public class BaseDataTest {
public static void main(String[] args) {
byte b1 = 127;
byte b2 = 127;
Byte b3 = 127;
Byte b4 = new Byte("127");
System.out.println(b1 == b2);
System.out.println(b1 == b3);
System.out.println(b1 == b4);
char c1 = 'a';
char c2 = 'a';
System.out.println("\n" + (c1 == c2));
}
}
image.png
网友评论