17

I am surprised to see this behaviour.

Is it a bug or something?

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)

above code compiles and run fine without any reference to new Integer(300). Why so?

I am only interested in knowing why Integer = new Integer(300); is okay without any reference.

4

3 回答 3

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

这会创建两个变量:

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

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

一般来说,我们可以构造以下形式的有效语句:

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

这相当于

Type t1 = ...;
Type t2 = ...;
Type t3 = ...;
...
于 2013-07-11T20:26:58.163 回答
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,因此无限循环

于 2013-07-11T20:23:24.250 回答
3
    String String = "foo";
    System.out.println(new String(String));

也是合法的 - 编译器足够聪明,可以确定哪个是变量引用,哪个不是。

于 2013-07-11T23:48:00.087 回答