Integer与Int,自动装箱和自动拆箱

Integer与Int,自动装箱和自动拆箱,第1张

Integer与Int,自动装箱和自动拆箱 Integer与Int的比较

Integer是int的包装类,int则是java的一种基本数据类型

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

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

Integer的默认值是null,int的默认值是0。

Integer变量和int变量用比较时,只要两个变量的值是相等的,则结果为true。因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较(值相同就一样)。

Integer 类型的对象包含一个 int 类型的字段。 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理道 int 类型时非常有用的其他一些常量和方法,比如定义了表示整数的最大值和最小值的常量

Integer与Int的适用场景

int类型:绝大部分时候用int,用来进行一些加减乘除的运算or作为参数进行传递。
Integer:在泛型的时候必须用Integer。

比如List list = new ArrayList()可以 ,而List list = new ArrayList()则不行。因为像ArrayList,HashMap这些容器都是装object,向其中中放东西时,像int,double这种内建类型是放不进去的,这时就需要这些内建类型的外覆类了。然后就是声明对象时建议用Integer,声明一个变量时最好声明为对象格式,这样更能体现java面向对象的思想。
 

自动装箱和自动拆箱

装箱就是自动将基本数据类型转换为包装器类型;

拆箱就是 自动将包装器类型转换为基本数据类型。

日常开发中,靠这些基本数据类型几乎能够满足我们的需求,但是基本类型终究不是对象,往重了说不满足面向对象的开发思想,往轻了说就是使用不方便.我们知道,类的优点在于它可以定义成员变量、成员方法,提供丰富便利的功能,因此Java在JDK1.0的时候就设计了基本数据类型的包装类,而在JDK1.5中引入了新特性:自动装箱和拆箱。
 

Java数据类型

 实现代码:

    public static void main(String[] args)
    {
        int intValue = 100;
        Integer boxValue = intValue;//自动装箱
        int value = boxValue;//自动拆箱
    }

反编译:

 public static void main(String[] args) {
    int intValue = 100;
    Integer boxValue = Integer.valueOf(intValue);
    int value = boxValue.intValue();
  }

当把基本类型int直接等号赋值给Integer包装类的时候,实际上在编译过程中,编译器多做了一步额外的 *** 作,就是反编译示例中的Integer.valueOf(intValue)。这一步就是自动装箱的语法糖,稍后我们进到该方法中继续探索。而对应的,当把Integer直接等号赋值给int基本类型的时候,也是如此,编译器替我们执行了一步boxValue.intValue() *** 作。这一步就是自动拆箱的语法糖。实际上,所谓的语法糖,自动装箱,拆箱都只是一个名词定义而已,不用纠结于名词本身,我们只关心原理。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5715893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存