[问题] 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