Подтвердить что ты не робот

Объявление 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); в порядке без каких-либо ссылок.

4b9b3361

Ответ 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));

также является законным - компилятор достаточно умен, чтобы выяснить, какая переменная ссылка, а какая нет.