為什么s1是變量? ( // s1是變量,s4在運(yùn)行時(shí)才知道具體值,所以s3和s4是不同的對(duì)象) 當(dāng)時(shí)==時(shí)是比較兩個(gè)變量的地址?equals比較的是他們的內(nèi)容值?
public class HelloWorld {
? ? public static void main(String[] args) {
String s1 = "imooc";
String s2 = "imooc";
? ? ? ??
? ? ? ? //定義字符串s3,保存“I love”和s1拼接后的內(nèi)容
String s3 = "I love"+s1;
? ? ? ? // 比較字符串s1和s2
// imooc為常量字符串,多次出現(xiàn)時(shí)會(huì)被編譯器優(yōu)化,只創(chuàng)建一個(gè)對(duì)象
System.out.println("s1和s2內(nèi)存地址相同嗎?" + (s1 == s2));
? ? ? ??
? ? ? ? //比較字符串s1和s3
System.out.println("s1和s3內(nèi)存地址相同嗎?" + (s1 == s3));
String s4 = "I love " + s1;
? ? ? ? ?//比較字符串s4和s3
// s1是變量,s4在運(yùn)行時(shí)才知道具體值,所以s3和s4是不同的對(duì)象
System.out.println("s3和s4內(nèi)存地址相同嗎?" + (s4 == s3));
}
}
2015-07-23
結(jié)果應(yīng)該是true false false ??
s1 與 s2 是不同的,只是jvm它會(huì)檢測(cè)到你輸入的值都是一樣的,就會(huì)把s1 和 s2 同時(shí)指向在一起。所以,s1 == s2 ?這比較的是地址
而s4 s3 的值是相等的,當(dāng)時(shí)它們指向的地址是不同的。所以是false