Por que x == (x = y) não é o mesmo que (x = y) == x?

Considere o seguinte exemplo: class Quirky { public static void main(String[] args) { int x = 1; int y = 3; System.out.println(x == (x = y)); // false x = 1; // reset System.out.println((x = y) == x); // true } } Não tenho certeza se existe um item na Especificação de Linguagem Java que...