无名变量声明 - 为什么它有效?

2022-09-02 23:24:49

我很惊讶地看到这种行为。

是虫子还是别的什么?

for(Object obj = new Object(), Integer = new Integer(300);
    obj.toString().length()>3;
    System.out.println("on object's loop")) {

} //causes an infinite loop (not foreach loop, of course)

上面的代码编译并运行良好,无需任何引用。为什么会这样?new Integer(300)

我只想知道为什么在没有任何参考的情况下是可以的。Integer = new Integer(300);


答案 1
Object obj = new Object(), Integer = new Integer(300);

这将创建两个变量:

  1. obj 类型 ,分配给 。Objectnew Object()
  2. 整数(是的,这是变量的名称也是类型,它被分配给 。Objectnew Integer(300)

顺便说一句,这与-loop无关;该行本身可以很好地编译。现在,如果这真的是一个,那将是一个不同的故事。for,;

通常,我们可以构造以下形式的有效语句:

Type t1 = ..., t2 = ..., t3 = ..., ...;

这相当于

Type t1 = ...;
Type t2 = ...;
Type t3 = ...;
...

答案 2

我想他是在问为什么 Integer = new Integer(300) 有效。– 阿尔沙吉 2 分钟前

Integer是有效的标识符名称,其类型是因为Object

Object obj = new Object(), Integer = new Integer(300);

这相当于

int a=2, b=4;

obj.toString()打印长度> 3 的(由类名和哈希码组成),因此无限循环String