作者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/cn.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