[問題] 有關JAVA的reference

看板java作者時間11年前 (2013/06/09 14:18), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串1/1
各位好 最近在寫code的時候犯了一個常見的錯誤,這個bug是看成程式碼的時候發現的,之前都 沒有出錯。 它的形式大概是 String str; str = "1"; doSth(); str = "2"; doSth(); str = "3"; doSth(); str = "2"; doSth(); void doSth() { if (str == "1") { str = "2"; ... } else if (str == "2") { str = "3"; ... } else if (str == "3") { str = "1"; ... } } 我知道比對字串內容應該要用equals,但這段code竟然能像我想的一樣進行。 我是由C/C++開始寫程式的,我在寫JAVA的時候也發現雖然JAVA表面上說沒有指標, 但根本到處都是指標的行為,reference也跟C++的reference不一樣。 但我沒有深入理解JAVA的機制,所以如果用C/C++來解釋的話,就是 把JAVA的String str改成C/C++的char* str str = "1" 實際是把"1"的位址存進去,比對(==)的時候也是比位址一不一樣, 而相同內容的多個string literal編譯器又通常只存一個, 所以才會"剛好"像我想的那樣進行。 但 JAVA 不知道是不是可以用一樣的道理解釋,或是因為不同的原因,拜託麻煩各位 解答了,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.124.79

06/09 14:25, , 1F
String pool
06/09 14:25, 1F

06/09 14:30, , 2F
謝謝 部分相同 但更加進步
06/09 14:30, 2F

06/09 15:56, , 3F
用變數代替就會炸光光啦
06/09 15:56, 3F

06/09 17:12, , 4F
嗚嗚嗚嗚... 我錯了...... Orz
06/09 17:12, 4F

06/09 18:42, , 5F
PsMonkey你是說String s1="1"; String s2="2"這樣的嗎?
06/09 18:42, 5F

06/09 18:49, , 6F
不是,我完全記錯了,不要管我...
06/09 18:49, 6F

06/09 18:49, , 7F
要 str = new String("1") 才會出事....
06/09 18:49, 7F

06/09 18:49, , 8F
可惜 tkcn 都不酸我 XDDDD
06/09 18:49, 8F

06/09 19:17, , 9F
留著等有板聚時爆料呀,PsMonkey 犯錯大全 (817 pages)
06/09 19:17, 9F

06/10 09:24, , 10F
string要用equal
06/10 09:24, 10F
文章代碼(AID): #1Hj1ud-v (java)