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