[問題] Integer 如何pass-by-ref

作者: DONmilK (DONmilK)   2018-11-27 15:26:07
各位版上朋友好
小弟使用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
不知道有什麼解法呢?
謝謝
作者: ssccg (23)   2018-11-27 16:35:00
Integer是個reference type,的確會pass by ref's value所以傳同一個Integer進去就真的是同一個,問題是在Integer是immutable,做a++其實會編譯成a = Integer.valueOf(a.intValue()+1);所以跑到最後一行時a b本來就不是原來的a b了你自己試傳兩個new Integer(),在第一個if就會return了

Links booklink

Contact Us: admin [ a t ] ucptt.com