Объявление Nameless variable - почему это работает?
Я удивлен, увидев это поведение.
Это ошибка или что-то еще?
for(Object obj = new Object(), Integer = new Integer(300);
obj.toString().length()>3;
System.out.println("on object 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);
Это создает две переменные:
-
obj
типа Object
, который присваивается new Object()
.
-
Integer
(да, это имя переменной) также типа Object
, который присваивается new Integer(300)
.
Кстати, это не имеет никакого отношения к for
-loop; эта линия сама скомпилировала бы. Теперь, если этот ,
был действительно ;
, это была бы другая история.
В общем случае мы можем построить действительные утверждения вида:
Type t1 = ..., t2 = ..., t3 = ..., ...;
что эквивалентно
Type t1 = ...;
Type t2 = ...;
Type t3 = ...;
...
Ответ 2
Я думаю, он спрашивает, почему Integer = новый Integer (300) работает. - arshajii 2 мин назад
Integer
- это действительное имя идентификатора, а его тип Object
из-за
Object obj = new Object(), Integer = new Integer(300);
Что эквивалентно
int a=2, b=4;
obj.toString()
печатает String
(состоящее имя класса и hashcode), длина которого > 3, поэтому бесконечный цикл
Ответ 3
String String = "foo";
System.out.println(new String(String));
также является законным - компилятор достаточно умен, чтобы выяснить, какая переменная ссылка, а какая нет.