1 java中== 和 equals 的区别
package cn.nancy.testArary;
public class TestString {
public static void main(String[] args) {
String str = "abcd";
String str1 = "abcd";
System.out.println(str.equals(str1)); //true
System.out.println(str == str1); //true
String str2 = new String("abcd");
System.out.println(str.equals(str2)); //true
System.out.println(str == str2); //false
System.out.println(str.charAt(1));
}
}
在==中str和str1 都是指向相同的地址,所以,返回结果都是true.
记住一点: == 比较的是地址,
equals比较的是内容,因此只要字符串中内容相同,返回的一定是true。
charAt(int index): 检索字符串,返回索引位置的char值。
2. 下面是java中equals和charAt的源码,可以帮助更好的理解-:
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;
}
public char charAt(int index) {
if (isLatin1()) {
return StringLatin1.charAt(value, index);
} else {
return StringUTF16.charAt(value, index);
}
}
运行结果如下:
3.内存结构分析: