作者DONmilK (DONmilK)
看板java
標題[問題] Integer 如何pass-by-ref
時間Tue Nov 27 15:26:07 2018
各位版上朋友好
小弟使用Java不久 最近被問到一個神奇的題目
void bar(Integer a, Integer b) {
if(a != b) return;
if(a > 200) return;
a++;
b++;
b++;
assert a < b;
}
目的是要觸發assertion error
如果用c++可以讓兩個input指向同一個memory address來觸發
但java都是pass by value 不管怎樣a, b都會被當成不同的物件來處理
而因為第二個if的關係 不能傳入a=b=INT_MAX-1 來導致overflow
不知道有什麼解法呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 107.0.114.25
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1543303571.A.F20.html
1F:→ ssccg: Integer是個reference type,的確會pass by ref's value 11/27 16:35
2F:→ ssccg: 所以傳同一個Integer進去就真的是同一個,問題是在Integer 11/27 16:46
3F:→ ssccg: 是immutable,做a++其實會編譯成 11/27 16:47
4F:→ ssccg: a = Integer.valueOf(a.intValue()+1); 11/27 16:50
5F:→ ssccg: 所以跑到最後一行時a b本來就不是原來的a b了 11/27 16:59
6F:→ ssccg: 你自己試傳兩個new Integer(),在第一個if就會return了 11/27 17:04