来看有关String类的一个例子:
public class practice {
public static void main(String[] args) {
String strA="hello";
String strB= new String("hello");
String strC=strB;
System.out.println(strA==strB);
System.out.println(strA==strC);
System.out.println(strB==strC);
}
}
上述例子输出
false
false
true
怎么解释?
其实要解释上述例子需要对栈内存和堆内存的相关知识充分了解
首先 String strA="hello"; 这一句开辟出strA指向一个新的堆内存空间(假设为堆地址为ox001)
第二句 String strB= new String(); new关键字又开辟出一个新的堆内存
(假设开辟出的堆内存地址为ox002)
然后呢 第三句话 String strC=strB; c于栈内存中指向了b的堆内存空间(地址为ox002,此处不是假设而是前提是第二句话的必然)
由此,我们可以得到结果:
false
false
ture
所以此处引申出以下结论
当”==“在字符串对象时,比较的是字符串对象的内存地址,且”&