String中的"=="和"equals()"方法
运行结果:
第一种方式,"a"存放在方法区的字符串常量池中,a存放的是a的地址,在栈中。
第二种方式,"a"存放在堆空间中,a1存的是a的地址,在栈中。
"=="比较的是地址值,如果" String b="a" ",那么"a==b"为true,常量池中不能存放相同的值。a1和a的"a"存放的位置不同,所以"=="返回的是false。
"equals"比较的是字符序列,也就是char型数组的值,两个存的都是"a",所以返回true。
String的equals方法如下:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() == aString.coder()) { return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value); } } return false; }