你可以试试:
Integer i1 = 13;
Integer i2 = 13;
System.out.println(i1 == i2); 看看打印结果是什么? 结果返回的是true.
156怎么会返回false了呢?
原因是:对于基本数据类型的整数,要装箱成Integer对象的时候,如果这个数字在一个字节之内,也就是-128到127之间的数字,一旦被包装成Integer对象之后,就会把它缓存起来,在一个池里面。当下次又要把一个整数包装成Integer对象的时候,就会先要到缓存池里面看有没有这个数,如果有就从缓存池里面取,这样就节省了内存空间。
其实这是一种设计模式,叫享元模式。
所以13被缓存起来了,用的是同一个对象。所以返回的是true.而158返回的就是false,明白了吗? |