这个问题出现在我用Java编写的实习职位的一个面试问题中。
请注意,布尔函数isSame
实际上将2个参数声明为Integer
类 - 而不是int
,所以我认为a
和b
是对象,对吗?
public class ForLoop{
public static boolean isSame(Integer a, Integer b) {
return a == b;
}
public static void main(String []args){
int i = 0;
for (int j=0; j<500; ++j) {
if (isSame(i,j)) {
System.out.println("Same i = "+i);
System.out.println("Same j = "+j);
++i;
continue;
} else {
System.out.println("Different i = "+i);
System.out.println("Different j = "+j);
++i;
break;
}
}
System.out.println("Final i = " + i);
}
}
我的第一个想法是for
循环将在第一次运行中以结果Final i = 1
终止,
但令我惊讶的是,最终输出为i = 129
。当i&amp; i时,循环终止。 j = 128。
Same i = 126
Same j = 126
Same i = 127
Same j = 127
Different i = 128
Different j = 128
Final i = 129
有人可以解释一下吗?
答案 0 :(得分:4)
在测试Object
类型的等同使用.equals()
时,您发现-128到127(含)是合并的。 JLS-5.1.7部分说明了
如果输入框的值p为true,false,字节或字符在\ u0000到\ u007f范围内,或者
的情况int
或short
数字在-128到127之间(包括),然后让r1和r2成为p的任意两次拳击转换的结果。始终是r1 == r2。