Por qué hacer = = comparaciones con Integer.valueOf (Cadena) ¿da resultados diferentes para 127 y 128?


No tengo idea de por qué estas líneas de código devuelven diferentes valores:

System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));

La salida es:

true
false
true

¿por Qué la primera vuelta true y el segundo retorno false? ¿Hay algo diferente que no sepa entre 127 y 128? (Por supuesto que sé que 127 128.)

También, ¿por qué el tercero regresa true?

He leído la respuesta de esta pregunta , pero todavía no entiendo cómo puede regresar true, y por qué el código en la segunda línea devuelve false.


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52