int与Integer的区别

本文探讨了Java中int与Integer的区别,包括基本使用、内存存储和比较操作的差异。Integer作为int的包装类,需要实例化,而int作为基本类型可以直接使用。在比较时,Integer对象的引用不等可能导致比较结果为false,即使数值相同。对于-128到127之间的Integer,由于缓存机制,它们可能会相等。此外,Java提供了自动装箱和拆箱机制,使得基本类型与封装类之间的转换更加便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本使用对比
int是基本数据类型,Integer是int的包装类;
int不需要实例化就可使用,Integer需要实例化才能使用;
int直接储存数据值,Integer是引用类型,是对象的地址;
int默认为0,integer默认为null。

int与Integer的深入对比
a.由于Integer变量是对象的引用,所以两个new出来的Integer变量是不相等的,因为其内存地址不同。

Integer i = new Integer(10);
Integer j = new Integer(10);
i==j;//false

b.Integer和int比较时,当两个变量值相等时,才输出true。(因为当Integer和基本数据类型int比较时,java会自动拆包装为int,实际上就是两个int比较。)

Integer i = new Integer(10);
int j = 10;
i==j;//true

c. new Integer()生成的变量和非new出来的Integer变量比较结果为不相等。(因为new Integer()生成的变量指向的是堆中新建的对象,而非new的Integer变量指向java常量池中的对象。内存中的地址不同)

Integer i = new Integer(10);
Integer j = 10;
i==j;//false

d.两个非new的Integer对象比较,若两变量值在-128到127之前则相等,若超出此范围则不相等。(因为java在编译Integer i = 127 时的翻译是 Integer i = Integer.valueOf(127)。而java API对Integer的valueOf的定义是,在-128到127之间的数会缓存,在第一次Integer i =127时缓存,第二次Integer j = 127时,直接从缓存中获取,两次的地址相当于一样。)

Integer i = 127;
Integer j = 127;
i==j;//true
Integer a = 128;
Integer b = 128;
a==b;//false

java为每个原始类提供了封装类(还有自动 装箱和拆箱 机制)
基本数据类型: boolean, char, byte, short, int, long, float, double。
封装类类型: Boolean, Character, Byte, Short, Integer, Long, Float, Double。

自动装箱:将基本数据类型重新转化为对象

public class test{
  public static void main(String[] args){
    Integer a = 9;
    //上面的声明时就用到了自动装箱:解析 Integer a = new Integer(9); 如此一来a就可以调用对象所声明的所有方法了。
  }
}

自动拆箱:将对象重新转化为基础数据类型

public class test{
  public static void main(String[] args){
    Integer a = 9;
    a--;
    //a-- 计算时就用到了自动拆箱。因为对象是不可以直接进行计算的,要先转化为基础数据类型。
    //还有int b = a;也用到了自动拆箱
  }
}

深入分析

:
public class test{
  public static void main(String[] args){
    Integer i = 127; Integer j = 127;  i==j;//true
    Integer a = 128; Integer b = 128;  a==b;//false
//java对Integer和int的自动装箱和拆箱有一种享元模式。 -128到127之间的值会被放入内存中可重用,最终这个范围的值只存一个对象,而超过该范围的值不会被重用,每次都会new一个新的。
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值