各位好
最近在寫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
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
06/09 17:12, 4F
→
06/09 18:42, , 5F
06/09 18:42, 5F
推
06/09 18:49, , 6F
06/09 18:49, 6F
→
06/09 18:49, , 7F
06/09 18:49, 7F
→
06/09 18:49, , 8F
06/09 18:49, 8F
→
06/09 19:17, , 9F
06/09 19:17, 9F
→
06/10 09:24, , 10F
06/10 09:24, 10F