当前位置: 首页 > 知识库问答 >
问题:

Java面试:for循环、对象/类引用和绑定限制[重复]

祁兴运
2023-03-14

这个问题出现在我的一个用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   

谁能解释一下吗?

共有1个答案

孔欣可
2023-03-14

当测试object类型是否相等时,请使用.equals(),因为您发现-128到127(含)是池。JLS-5.1.7部分地说,

如果装箱的值p是true、false、字节或\u0000到\u007f范围内的字符,或在-128到127(含)之间的intshort数字,则设r1和r2是p的任意两次装箱转换的结果。r1==R2总是这样。

 类似资料:
  • 我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:

  • 我有圆形参考的问题。 我有Rest Webservices,它会将对象返回到前端,问题是当我试图返回具有多个引用的对象时,结果会得到无限的响应,从而生成 这些对象是由Hibernate代码生成自动生成的,我需要在后端有循环引用,我只需要在使用Jackson将信息发送到前端之前删除它。 控制器方法标头为: 我没有做任何明确的事情来转换为杰克逊,我是一个新手,我认为杰克逊自动解决了这个问题。

  • 下面是一个简单的示例,我想使用for/in循环显示对象属性 它显示未定义。 但如果使用,它可以工作,并显示1 2 3 为什么不能使用在FOR/in循环中显示?

  • 问题内容: 我在我的代码中发现了一个问题。首先是代码: 输出为: 我以为第一个循环也会覆盖数组中的String。因此,无论如何输出都将结束。似乎它创建值的副本,而不是创建引用。我从未意识到这一点。我做错了吗?是否可以选择创建参考? //编辑:似乎每个人都知道,除了我。我来自C语言,没有对与C完全不同的术语“引用”给予足够的关注。幸运的是,这一次我只花了10分钟就弄清了这一点。 问题答案: 这个:

  • 主要内容:for、do-while 和 while 的区别for 语句是应用最广泛、功能最强的一种循环语句。大部分情况下,for 循环可以代替 while 循环、do while 循环。 for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。假如条件表达式的结果为假,那么它的循环语句根本不会执行。 for 语句通常使用在知道循环次数的循环中。 for 语句语法格式如下所示。 for 循环中 3 个条件表达式的含义如表 1 所示。 表 1

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l