頁:
[1]
String物件問題
小弟我一個字串問題的疑問,String不同於一般型別,他是一個物件,如以下範例str1 = "apple"即是建立一個新的物件,那我再宣告str2 = "apple"即是在建立一個物件
那麼問題來了 ......字串比對內容是用equals沒錯,但以下範例if(str1 == str2)卻是可以成立的印出ok,我有點不解的是==是用來比對物件的儲存位址是否相同,那麼str1跟str2都隸屬於不同物件位址,為何if(str1 == str2)卻是可以成立
麻煩各位大大協助解開我心裡疑惑,非常感謝
String str1 = "apple";
String str2 = "apple";
if(str1 == str2){
System.out.println("ok");
}
if(str1.equals(str2)){
System.out.println("ok2");
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> https://en.wikipedia.org/wiki/String_interning
一些程式語言會把創造同樣的String返回同樣的物件, Java是其中一個, 所以在你的例子其實就是同一個物件.
要測試==不相同的例子, 可以把其中一個或兩個都用其他方式去構成, 如new String()或char[]等等 theloserbm 發表於 2016-7-14 03:21 PM static/image/common/back.gif
https://en.wikipedia.org/wiki/String_interning
一些程式語言會把創造同樣的String返回同樣的物件, Java ...
謝謝您 我了解了
有測試其他的方式建構字串
非常感謝 java 使用 = 建立字串時,JVM會自行在記憶體中使用一個字串池(String pool)來維護,所以str2 的字串發現在str1已經建立過了 ,他就不會在新建立一個字串,所以如果你用 new String來產生字串,你就會發現用 == 結果就會是false 22616846 發表於 2016-7-14 09:52 PM static/image/common/back.gif
java 使用 = 建立字串時,JVM會自行在記憶體中使用一個字串池(String pool)來維護,所以str2 的字串發現 ...
了解,JAVA還有很多東西我還須學習
感謝您的回覆,非常感謝<br><br><br><br><br><div></div> 如果是語言本身沒有定義的狀況,有時它的結果取決於 compiler。(Java 這類的問題可能比較少,C/C++很多)
這種 based on compiler 的特性,不建議去背它,也許你換一套 VM or Compiler 就會有不同的結果了。
頁:
[1]