Java访谈:for循环,对象/类引用和绑定限制

时间:2014-10-24 02:13:31

标签: java class object for-loop

这个问题出现在我用Java编写的实习职位的一个面试问题中。 请注意,布尔函数isSame实际上将2个参数声明为Integer类 - 而不是int,所以我认为ab是对象,对吗?

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   

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

在测试Object类型的等同使用.equals()时,您发现-128到127(含)是合并的。 JLS-5.1.7部分说明了

  

如果输入框的值p为true,false,字节或字符在\ u0000到\ u007f范围内,或者intshort数字在-128到127之间(包括),然后让r1和r2成为p的任意两次拳击转换的结果。始终是r1 == r2。

的情况