【问题标题】:Java interview: for loop, object/class reference and bound limit [duplicate]Java面试:for循环,对象/类引用和绑定限制[重复]
【发布时间】:2014-10-24 02:13:31
【问题描述】:

这个问题出现在我的一个用 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 & j = 128 时,循环终止。

  Same i = 126
  Same j = 126
  Same i = 127
  Same j = 127
  Different i = 128
  Different j = 128
  Final i = 129   

谁能解释一下?

【问题讨论】:

标签: java class object for-loop


【解决方案1】:

在测试 Object 类型是否相等时,请使用 .equals(),因为您发现 -128 到 127(包括)被合并。 JLS-5.1.7 部分表示,

如果被装箱的值 p 是真、假、字节或字符,介于 \u0000 到 \u007f 之间,或者是介于 -128 和 127(含)之间的 intshort 数字,则让r1 和 r2 是 p 的任意两次装箱转换的结果。 r1 == r2 总是如此。

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2015-01-27
    • 2020-06-06
    • 2014-07-27
    相关资源
    最近更新 更多