我很惊讶地看到这种行为。
这是一个错误还是什么?
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);
没有任何参考可以。
答案 0 :(得分:27)
Object obj = new Object(), Integer = new Integer(300);
这会创建两个变量:
obj
的Object
,已分配给new Object()
。Integer
(是的,这是变量的名称)也是类型Object
已分配到new Integer(300)
。顺便说一句,这与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));
也是合法的 - 编译器很聪明,可以找出哪个是变量引用,哪个不是。