Это потому, что вы неправильно понимаете порядок операций присваивания.
«выражение правой стороны вычисляется сначала, а затем присваивается левой стороне» означает, что вы присваиваете правое значение слева значение после оценки правильного значения. В нем ничего не сказано о порядке вычисления левого значения.
В Java сначала выполняется оценка левой стороны, затем выполняется оценка правой стороны, а затем назначается правая сторона левой стороне. Вы можете проверить это, запустив следующий код:
public class MainClass {
public static void main(String[] args) {
Class1 c = new Class1();
(c.echo("left")).x = tell(c.echo("right")); // Prints "left", then "right"
}
private static int tell(Object o) {
return 11;
}
}
public class Class1 {
public int x;
public Class1 echo(String text) {
System.out.println(text);
return this;
}
}