Согласно эта таблица приоритетов и ассоциативности Java-операторов, доступ к члену имеет более высокий приоритет, чем оператор new
.
Однако, учитывая класс myClass
и нестационарную функцию-член myFunction
, следующая строка кода действительна:
new myClass().myFunction();
Если .
оценивается до new
, как эта строка может быть выполнена? Другими словами, почему не нужны скобки?
(new myClass()).myFunction();
Я предполагаю, что, поскольку ()
имеет приоритет с .
, сначала оценивается myClass()
, поэтому компилятор знает даже до того, как оценил ключевое слово new
, что конструктор myClass
с нулевыми параметрами называется. Однако это все еще кажется, что первая строка должна быть идентична new (myClass().myFunction());
, что не так.