int与Integer的区别

                                                                           int与Integer 的区别

一 区别:

  • int 是基本数据类型,int 变量存储的是数值。
  • Integer 是引用数据类型(包装类),实际是一个对象。Integer 存储的是引用对象的地址。
  • int 变量不需要实例化就可以使用,Integer 必须实例化才可以使用。
  • int 的默认值是 0 ,Integer 的默认值是 null.
Integer a = null;
int b = 0;

存储位置:

对于 int a = 2; int j = 2 ; 内存中发生了怎样的变化?

首先会开辟一个 a 的存储区域,然后再检查 栈中有没有 2 这个值,如果没有,则保存到栈中,然后让 a = 2,接着开辟一个 j 的存储区域,检查站中是否有 2 这个值,有,就直接让 j = 2. 这就是所谓的栈内数据共享。

int 与 integer 所占内存比较:

Integer 对象会占用更多的内存。Integer 是一个对象,需要存储对象的元数据。但是 int 是一个原始类型的数据,所以占用空间较少。

int 与 integer 的比较:

1.两个 Integer 相比较:为什么同样的值,两次比较会有所不同???

public class IntTest1 {

    public static void main(String[] args) {

        Integer a = 20;
        Integer b = 20;
        System.out.println(a == b);   // true
        Integer c = -1299;
        Integer d = -1299;
        System.out.println(c == d );  // false
        System.out.println(c.equals(d));  //true 
        Integer f = new Integer(100);
        Integer g = new Integer(100);
        System.out.println(f == g );   // false
        System.out.println(f.equals(g));  // true
    }

}

因为 Integer 与 Integer 相比较,数据在 -128 ~ 127 范围内,就会从缓存中拿数据去比较,比较结果就相等;若不在这个范围内,就会直接创建新的一个 Integer 对象,使用 == 判断的是两个内存的应用地址,所以不相等。这是因为 Integer 的缓存机制。

Integer 缓存机制:

在 java5 中,为 Integer 的操作引入了一个新特性,用来节省内存和提高性能。整型对象在内部实现通过使用相同的 对象引用 实现缓存和重用,但是只适用于1.数据在 -128 ~ 127 范围内,2.适用于自动装箱但是不能是使用构造函数创建的对象,这两个条件必须共存。

java 编译器把原始类型数据自动转换成包装类的过程成为自动装箱(autoboxing),这相当于调用 valueOf 方法。

Integer a = 10;
相当于
Integer a = Integer.valueOf(10);

2. int 与 Integer 相比较:

public class IntTest1 {

    public static void main(String[] args) {

        int a = 20;
        Integer b = 20;
        System.out.println(a == b);  // true

        int c = 20;
        Integer d = new Integer(20);
        System.out.println(c == d);   //true

    }
}

 

Integer 自动拆箱: 将 包装类自动转为基本数据类型

int 与 Integer 比较的时候, Integer 会自动拆箱,然后与 int 类型比较。

c == d 相等于 d.intValue() == c.

 

java 内存分配:

寄存器:程序无法控制,读写最快!

栈:存放局部变量和对象的引用值,而对象本身则放在堆中(自动回收),可数据共享。

堆:程序运行期被动态创建,存放在堆中。手动回收或者系统 gc 自动回收。

静态域: 存放对象中对象的 static 成员。

常量池:存放常量。

使用场景:

对于 int 与 Integer 的使用场景,一般来说若是该最终值必须为0,那么使用 int 类型,若是最终结果属于 null ,那么需要使用 Integer.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值