Java装箱的 " == " 的问题

装箱和拆箱

 packagecom.xzj.Test;
 
 /*
 * @ author thisxzj
 * @ create 2019-02-25 10:56
 */
 publicclassBase{
 publicstaticvoidmain(String[] args) {
 finalintNUM=127;
 Integeri1=NUM;
 Integeri2=Integer.valueOf(NUM);
 Integeri3=newInteger(NUM);
 
 System.out.println("i1 ==? i2 "+(i1==i2));
 System.out.println("i1 ==? i3 "+(i1==i3));
 System.out.println("i2 ==? i3 "+(i2==i3));
 
 System.out.println("i1 equals ? i2 "+(i1.equals(i2)));
 System.out.println("i1 equals ? i3 "+(i1.equals(i3)));
 System.out.println("i2 equals ? i3 "+(i2.equals(i3)));
 }
 }
 

结果:

 i1 ==? i2 true
 i1 ==? i3 false
 i2 ==? i3 false
 i1 equals ? i2 true
 i1 equals ? i3 true
 i2 equals ? i3 true

Integer 缓存池的大小默认为 -128~127。在int的数字在缓存的范围内的时候,可以认为直接数字装箱和valueOf是等价的。他们使用的是用一份资源。

在超过了缓存池的范围的时候:将上面代码中NUM常量变为128

运行的结果:

 i1 ==? i2 false
 i1 ==? i3 false
 i2 ==? i3 false
 i1 equals ? i2 true
 i1 equals ? i3 true
 i2 equals ? i3 true

可以看到,超过了这个范围,Integer对象使用的均不是同一份资源。

以上是Integer为例子,探索了包装类的缓存范围。

基本类型对应的缓冲池如下:

  • boolean: true 、false

  • byte:-128 ~ 127

  • short: -128 ~ 127

  • int: -128 ~ 127

  • char:0 ~ 127 对应的char

posted @ 2019-02-25 11:31  小徐同学是个coder  阅读(230)  评论(0编辑  收藏  举报