¿Cuándo puedo usar el operador "=="?

He encontrado una cita de jls:

Los operadores de igualdad pueden usarse para comparar dos operandos que son convertibles (§5.1.8) a tipo numérico, o dos operandos de tipo booleano o booleano, odos operandos que son de tipo de referencia o de tipo nulo. Todos los demás casos dan como resultado un error en tiempo de compilación.

Pero este código

   String str= "";
   Number num = 1;
   System.out.println(str == num);

¡cada operando es referencia!

dijo que se trata de tipos incompatibles.

¿Dónde dijo en jls que estos tipos deberían ser compatibles?

Respuestas a la pregunta(1)

Su respuesta a la pregunta