看板 java 關於我們 聯絡資訊
各位好 最近在寫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
tkcn:String pool 06/09 14:25
Minilogo:謝謝 部分相同 但更加進步 06/09 14:30
PsMonkey:用變數代替就會炸光光啦 06/09 15:56
PsMonkey:嗚嗚嗚嗚... 我錯了...... Orz 06/09 17:12
Minilogo:PsMonkey你是說String s1="1"; String s2="2"這樣的嗎? 06/09 18:42
PsMonkey:不是,我完全記錯了,不要管我... 06/09 18:49
PsMonkey:要 str = new String("1") 才會出事.... 06/09 18:49
PsMonkey:可惜 tkcn 都不酸我 XDDDD 06/09 18:49
tkcn:留著等有板聚時爆料呀,PsMonkey 犯錯大全 (817 pages) 06/09 19:17
swpoker:string要用equal 06/10 09:24