¿Cuál es la diferencia entre [n >> 3-n & 7] y [(int) (n >> 3) – (int) (n & 7)] en Java?

Primer caso: (n >> 3 - n & 7)
En este caso, siguiendo la precedencia del operador, el primero en ser evaluado
3 - n = -9 .
Ahora, el siguiente operador es el operador de desplazamiento a la derecha. El operador de desplazamiento a la derecha con un conteo de desplazamiento negativo se enmascara con 0x1f [1].
-9 & 0x1f = 23 .
Ahora, evaluamos el resto de acuerdo con la precedencia del operador.
n >> 23 == 0 y
0 & 7 = 0 .

Segundo caso: (n >> 3) - (n & 7) (la conversión de tipo int es innecesaria)
Las llaves explícitas asegurarán sus primeras evaluaciones.
n >> 3 = 1
n & 7 = 4
y 1 - 4 = -3

La valiosa lección para aprender aquí es usar siempre llaves, no confiar en las peculiaridades del lenguaje para cualquier evaluación.

[1] Capítulo 15. Expresiones