Java int和Integer的区别

    在面试的时候或者平常有人问你java中int与Integer的区别,你该如何回答?

    大部分的回答,估计是Integer是int的包装类,可以自动拆箱和装箱,然后,就没有然后了。那你觉着这样的回答,提问的人会满意吗?

    个人认为应该这样回答:

    (1)int是java种8中基本类型之一,java中的8中基本类型分别是boolean,byte,char,short,int,long,float,double,它们分别有对应的包装类,其中int对应的包装类是Integer,Integer还有许多静态方法,比如我们常用的parseInt,可以将String类型转为int,当然还有其他转换的方法,不一一列举了,感兴趣的参考JDK文档。

    (2)Integer是类,定义变量的时候,可以这样定义:

     Integer a = 100;

     Integer b = 100;

     Integer c = 150;

     Integer d = 150;

     Integer e = new Integer(100);

     Integer f = new Integer(100);

     那么请问,a==b?  c==d?  a==e?  e==f

    如果你在eclipse中编写上述代码,输出的结果应该是 true false false false

   是不是很奇怪,比较的结果应该是要么相同,要么不同,怎么会是这样呢?这就和Integer的实现原理有关了,如果你查看Integer的源代码,你会发现,对于在-128-127之间的数字,Integer会进行缓存,具体参见下面的valueof方法:

1 public static Integer valueOf(int i) {
2         assert IntegerCache.high >= 127;
3         if (i >= IntegerCache.low && i <= IntegerCache.high)
4             return IntegerCache.cache[i + (-IntegerCache.low)];
5         return new Integer(i);
6     }

    所以上述a==b,c==d的结果就可以解释了。
   对于,a==e,a是放在常量池中的,e f 是new 出来的,放在堆中,它们的位置肯定不一样,也就不会相同了,记住== 比较的是位置,而不是大小。

  总结一下上述比较:
 
1.Integer是int的包装类,int是基本类型,初始化为0,Integer是对象,初始化为null;

2.int 和Intege定义r或new Integer相同的值比较,是相等的,自动拆箱

3.Integer定义的数值,-128-127之间是相同的,因为valueof函数,有缓存,其他就不同了

4.Integer和new Integer的,或者new Integer定义的数据比较,不同,Integer出来的,放在常量池,new Integer 指向堆内存的地址,
肯定不会一样的。



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值