Java中int和integer的区别

  1. integer是int的包装类(属于引用数据类型),而int是Java的基本数据类型
  2. Integer的默认值是null,int的默认值是0
  3. Integer实际是对象的引用,当new一个Integer时,实际上是指向此对象;而int则是直接存储数据值

1.new两个相同value的integer变量进行比较,会发现返回结果为false,这是因为new生成的两个integer指向不同的地址,而引用数据类型比较时实际是比较地址是否相同。

2.非 new 生成的 Integer 变量与 new Integer() 生成的变量比较,结果为 false,这是因为非 new 生成的 Integer 变量指向的是 java 常量池中的对象,而 new Integer() 生成的变量指向堆中新建的对象,两者在内存中的地址不同。所以输出为 false。

3.Integer 变量(无论是否是 new 生成的)与 int 变量比较,只要两个变量的值是相等的,结果都为 true。这涉及到一个叫做自动拆箱的过程,就是将包装类自动转换成对应的基本数据类型,(与此相反的自动装箱就是将基本数据类型自动转换成对应的包装类,以后也会见到),此时就是两个数值的比较,结果必定为true。

4.两个非 new 生成的 Integer 对象进行比较,如果两个变量的值在区间 [-128,127] 之间,比较结果为 true否则,结果为 false

这是因为java在编译Integer i = 127 ;时,会翻译成为Integer i = Integer.valueOf(127),而java API中对Integer类型的valueOf的定义如:

 

继续往底层看:

这一点看不太懂,大致意思是java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,所以结果为true;而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样,返回为false。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值