java什么是拆装箱_JAVA自动拆装箱

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 list=new ArrayList();

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压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值