精华内容
下载资源
问答
  • 主要为大家详细介绍了Java自动拆装箱的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java自动拆装箱

    2021-08-28 00:10:11
    自动装箱Java SE5 之前,要进行装箱,可以通过以下代码: Integer i = new Integer(10); 自动装箱: 就是将基本数据类型自动转换成对应的包装类。 自动拆箱:就是将包装类自动转换成对应的基本数据类型。 ...

    自动装箱

    在 Java SE5 之前,要进行装箱,可以通过以下代码:
    
    Integer i = new Integer(10);
    

    自动装箱: 就是将基本数据类型自动转换成对应的包装类。
    自动拆箱:就是将包装类自动转换成对应的基本数据类型。

    Integer i =10; //自动装箱 
    int b= i;      //自动拆箱
    

    自动装箱都是通过包装类的 valueOf()方法来实现的.
    自动拆箱都是通过包装类对象的 xxxValue()来实现的.

    场景示例: 将基本数据类型放入集合类

    Java 中的集合类只能接收对象类型,那么以下代码为什么会不报错呢?
    
    List<Integer> li = new ArrayList<>(); 
    for (int i = 1; i < 50; i ++)
    { li.add(i); }
    

    将上面代码进行反编译,可以得到以下代码:

    List<Integer> li = new ArrayList<>(); 
    for (int i = 1; i < 50; i += 2)
    { li.add(Integer.valueOf(i)); }
    
    其他场景:比较,三元运算符,方法返回值
    
    展开全文
  • Java 自动拆装箱

    2017-10-11 15:36:46
    什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候,我们会这样:Class a = new Class(parameter);当我们创建一个Integer...
    什么是自动装箱拆箱
    

    基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。

    一般我们要创建一个类的对象实例的时候,我们会这样:

    Class a = new Class(parameter);

    当我们创建一个Integer对象时,却可以这样:

    Integer i = 100; (注意:不是 int i = 100; )

    实际上,执行上面那句代码的时候,系统为我们执行了:Integer i = Integer.valueOf(100); (感谢@黑面馒头 和 @MayDayIT 的提醒)

    此即基本数据类型的自动装箱功能。

    基本数据类型与对象的差别 
    

    基本数据类型不是对象,也就是使用int、double、boolean等定义的变量、常量。

    基本数据类型没有可调用的方法。

    eg: int t = 1; t. 后面是没有方法滴。

    Integer t =1; t. 后面就有很多方法可让你调用了。

    什么时候自动装箱
    

    例如:Integer i = 100;

    相当于编译器自动为您作以下的语法编译:Integer i = Integer.valueOf(100);

    什么时候自动拆箱
    

      自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出。如下可实现自动拆箱:
    1 Integer i = 10; //装箱
    2 int t = i; //拆箱,实际上执行了 int t = i.intValue();

      在进行运算时,也可以进行拆箱。
    1 Integer i = 10;
    2 System.out.println(i++);

    Integer的自动装箱
    

    复制代码

    //在-128~127 之外的数
    Integer i1 =200;
    Integer i2 =200;
    System.out.println(“i1==i2: “+(i1==i2));
    // 在-128~127 之内的数
    Integer i3 =100;
    Integer i4 =100;
    System.out.println(“i3==i4: “+(i3==i4));

    复制代码

       输出的结果是:

    i1==i2: false
    i3==i4: true
    

    说明:

    equals() 比较的是两个对象的值(内容)是否相同。

    “==” 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

    前面说过,int 的自动装箱,是系统执行了 Integer.valueOf(int i),先看看Integer.java的源码:
    1
    2
    3
    4
    5
    6

    public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)  // 没有设置的话,IngegerCache.high 默认是127
    return IntegerCache.cache[i + 128];
    else
    return new Integer(i);
    }

    对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)

    所以范例中,i3 与 i4实际上是指向同一个对象。

    而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象,所以范例中,i1与i2 指向的是不同的对象。

    当然,当不使用自动装箱功能的时候,情况与普通类对象一样,请看下例:

    1 Integer i3 =new Integer(100);
    2 Integer i4 =new Integer(100);
    3 System.out.println(“i3==i4: “+(i3==i4));//显示false

    (感谢易之名的提醒O(∩_∩)O~)

    String 的拆箱装箱
    

    先看个例子:
    复制代码
    1 String str1 =”abc”;
    2 String str2 =”abc”;
    3 System.out.println(str2==str1); //输出为 true
    4 System.out.println(str2.equals(str1)); //输出为 true
    5
    6 String str3 =new String(“abc”);
    7 String str4 =new String(“abc”);
    8 System.out.println(str3==str4); //输出为 false
    9 System.out.println(str3.equals(str4)); //输出为 true
    复制代码

      这个怎么解释呢?貌似看不出什么。那再看个例子。
    1 String d =”2”;
    2 String e =”23”;
    3 e = e.substring(0, 1);
    4 System.out.println(e.equals(d)); //输出为 true
    5 System.out.println(e==d); //输出为 false
    第二个例子中,e的初始值与d并不同,因此e与d是各自创建了个对象,(e==d)为false 。
    同理可知,第一个例子中的str3与str4也是各自new了个对象,而str1与str2却是引用了同一个对象。

    转自:http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html

    展开全文
  • JAVA自动拆装箱

    千次阅读 2018-01-29 13:56:59
    1.自动拆装箱是什么?(是什么)自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和...

    1.自动拆装箱是什么?(是什么)

    自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱.

    java中有8中基本的数据类型,这八种基本的数据类型都有对应的封装类型,下面是对应关系:

    int——Integer
    float——Float
    double——Double
    byte——Byte
    long——Long
    char——Character
    boolean——Boolean
    short——Short

    2.java为什么要引入自动装箱和拆箱的功能?(为什么)

    举个例子:主要是用于java集合中,List<Inteter> list=new ArrayList<Integer>();
    list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象, 基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。

    实现原理:javac编译器的语法.

    3.又是怎么实现的呢?(怎么做)

    (举个例子)

    装箱:将基本类型转换成包装类对象

    int i=10;
    Integer x=new Integer(i);手动装箱
    Integer y=10;自动装箱
     
    拆箱:将包装类对象转换成基本类型的值
    Integer j=new Integer(8);
    int m=j.intValue();//手动拆箱
    int n=j;//自动拆箱

    看下面这段代码,为什么?(T为true,F为false)

    public class Main {
        public static void main(String[] args) {
             
            Integer a = 10;
            Integer b = 20;
            Integer c = 30;
            Integer d = 30;
            Integer e = 320;
            Integer f = 320;
            Long g = 30L;
            Long h = 20L;
             
            System.out.println(c==d);//T
            System.out.println(e==f);//F
            System.out.println(c==(a+b));//T
            System.out.println(c.equals(a+b));//T
            System.out.println(g==(a+b));//
            System.out.println(g.equals(a+b));
            System.out.println(g.equals(a+h));
        }
    }

    解释:

    因为自动装箱,自动调用valueOf方法.

     public static Integer valueOf(int i) {//Integer包装类的
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }

    Integer的valueOf方法中一句判断,i >= -128 && i <= IntegerCache.high
    如果数值在-128和127之间,就直接调用IntegerCache类,返回缓存中的数据,自然是同一个对象.
    否则新建一个Integer对象.

    (Double包装类的valueOf方法直接新建一个新对象)

    (Boolean包装类valueOf方法,返回 (b ? TRUE : FALSE),)其他的请自行查看,判断.

    同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值,其实就是自动装箱的相反操作.

    4.注意点(弊端):

    容易生成无用对象,因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作.

    展开全文
  • 主要介绍了Java三目运算中隐藏的自动拆装箱,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • java自动拆装箱

    2017-03-05 20:09:07
    装箱: 把基本的数据类型转化为包装类 拆箱:把包装类转化成基本数据类型 ...自动装箱: Integer i=10; 自动拆箱 int m=i; jdk是会向下兼容的 -比如 jdk1.4 里面写的代码,这个时候到5.0也可运行

      装箱: 把基本的数据类型转化为包装类


    拆箱:把包装类转化成基本数据类型


    自动装箱: Integer i=10;


    自动拆箱  int m=i;


    jdk是会向下兼容的

    -比如 jdk1.4 里面写的代码,这个时候到5.0也可运行

    展开全文
  • 浅谈Java自动拆装箱

    2020-12-03 17:35:49
    Java自动拆装箱什么是自动拆装箱需要拆装箱类型自动拆装箱基本实现自动拆装箱的好处对现实世界的模拟支持泛型提供丰富的api和属性自动封装小问题 什么是自动拆装箱 装箱:将基本数据结构转化为包装器类型 Integer ...
  • Java自动拆装箱

    2017-11-04 13:05:56
    自动拆装箱
  • Java自动拆装箱

    2019-06-02 14:24:08
    什么是自动拆装箱Java 语言支持的 8 中基本数据类型是: 整型:byte short int long 浮点型:float double 布尔型:boolean 字符型:char 自动装箱是 Java 编译器在基本数据类型和对应的对象包装类型之间...
  • java 自动拆装箱特性

    多人点赞 2021-09-14 16:00:54
    自动拆装箱的运用3.一些典型举例 一、自动装拆箱是什么? 有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类,例如 Integer类对应基本类型int。通常,这些类被称为包装器。 这些...
  • 深入理解Java包装类与自动拆装箱

    千次阅读 2020-06-21 22:36:30
    你真的理解Java包装类和自动拆装箱吗?有些知识你绝对不知道!
  • Java 自动拆装箱总结

    2020-07-21 17:10:00
    包装类的自动拆装箱:(我们拿int类型为例) 首先我们要知道,Integer是int的包装类,Integer是一个对象,int是一个基本数据类型。 1、要想将int基本数据类型转换为包装类Integer: Integer i1 = Integer.valueOf...
  • Java中的自动拆装箱

    2021-04-01 09:45:34
    目录 1、基本数据类型 基本数据类型有什么好处 整型的取值范围 超出范围怎么办 2、包装类型 ...7、自动拆装箱与缓存 ...8、自动拆装箱带来的问题 1、基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类
  • 拆装箱Java1.5引入的新特性,它是基本数据类型与包装类型的互相转化。 装箱:基本数据类型 =&amp;amp;gt; 包装类型 拆箱:包装类型 =&amp;amp;gt; 基本数据类型 JVM是如何实现拆装箱 一般情况下我们是不...
  • 自动拆装箱

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,980
精华内容 3,992
关键字:

自动拆装箱java

java 订阅