Simple Java expressions return some unexpected result
<p>The expressions used in the following Java code are nuts and pretty much unacceptable though I tested them just for a general purpose and obtained some unexpected result. The simple code snippet goes following.</p>

<pre><code>package wrapper;

final public class Main 
{
    public static void main(String[] args) 
    {
        Integer j1 = 127;
        Integer j2 = 127;
        System.out.println(j1==j2); //returns true!!!

        Integer k1 = 128;
        Integer k2 = 128;
        System.out.println(k1==k2); //returns false!!!

        Integer w1 = -128;
        Integer w2 = -128;
        System.out.println(w1==w2); //returns true!!!

        Integer m1 = -129;
        Integer m2 = -129;
        System.out.println(m1==m2); //returns false!!!
    }
}
</code></pre>

<hr>

<pre><code>Integer j1 = 127;
Integer j2 = 127;
System.out.println(j1==j2);
</code></pre>

<p>The above code obviously displays <strong>true</strong> hence, there is no question about it.</p>

<hr>

<pre><code>Integer k1 = 128;
Integer k2 = 128;
System.out.println(k1==k2);
</code></pre>

<p>The above code is expected to display true on the console but surprisingly, it shows <strong>false</strong>. Why?</p>

<hr>

<pre><code>Integer w1 = -128;
Integer w2 = -128;
System.out.println(w1==w2); 
</code></pre>

<p>This code displays <strong>true</strong> and no question about it.</p>

<hr>

<pre><code>Integer m1 = -129;
Integer m2 = -129;
System.out.println(m1==m2);
</code></pre>

<p>The above code again displays <strong>false</strong> though it is expected to return true. Why?</p>
