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

时间:2013-07-11 20:22:18

标签: java loops object for-loop

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

这是一个错误还是什么?

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);没有任何参考可以。

3 个答案:

答案 0 :(得分:27)

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

这会创建两个变量:

    类型为obj
  1. Object ,已分配给new Object()
  2. Integer (是的,这是变量的名称也是类型Object已分配到new Integer(300)
  3. 顺便说一句,这与for - 循环无关;该行可以自行编译。现在,如果,真的是;,那将是另一回事。

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

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

    相当于

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

答案 1 :(得分:15)

  

我认为他在问为什么Integer = new Integer(300)有效。 - arshajii 2分钟前

由于

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

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

相当于

int a=2, b=4;

obj.toString()打印String(包含类名和哈希码),其长度为> 3所以无限循环

答案 2 :(得分:3)

    String String = "foo";
    System.out.println(new String(String));

也是合法的 - 编译器很聪明,可以找出哪个是变量引用,哪个不是。