java integer == int_Java 中 int 和 Integer 的区别

基础:

1、int 是 java 的一种基础数据类型,而 integer 是int 的一个封装类。

2、Integer 变量必须实例化之后才能使用,而 int 变量不需要。

3、Integer 实际是对象的引用,当 new 一个 integer 对象时,实际上是生成一个指针指向该对象;而 int 是直接存储数据值。

4、Integer 的默认值是 null ,而 int 的默认值是 0。

延伸:

1、因为 integer 变量实际上是对 integer 对象的引用,所以两个通过new 的integer 变量永远不相等(因为 new 生成的是两个对象,其内存地址不一样)。

Integer i = new Integer(100);

Integer j = new Integer(100);

System.out.print(i == j);//false

2、当一个 integer 变量和一个 int 变量比较时,只要两个变量的值相等,那么结果就是true,因为 integer 本质是 int 的一个封装类,当两数比较时,java会自动将 integer拆包,所以本质上就是两个int 变量的比较。

Integer i = new Integer(100);

int j = 100;

System.out.print(i == j);//true

3、当一个 new 创建的 Integer 变量和一个非 new 创建的 Integer 变量比较时,结果为false。因为非 new 创建的变量存在 java 常量池中,而 new 创建的变量指向堆中新建的对象,两者的内存地址不同。

Integer i = new Integer(100);

Integer j = 100;

System.out.print(i == j);//false

4、当两个非 new 的 Integer 变量比较时,如果两个变量的值在-128到127之间,那么结果就是 true,否则是 false。

对于这个奇怪的结果,java 的解释是这样的:

Integer i = new Integer(100);//在编译时会变成Integer i = Integer.ValueOf(100)

而 java API 中对 Integer.valueOf()的定义如下:

public static Integer valueOf(int i){

assert IntegerCache.high >= 127;

if (i >= IntegerCache.low && i <= IntegerCache.high){

return IntegerCache.cache[i + (-IntegerCache.low)];

}

return new Integer(i);

}

即,对于 -128~127 的数,java会进行缓存,而下次再对一个 Integer 变量赋值时,如果在 -128~127 并且已经被缓存,那么就会直接从缓存中调用。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值