栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java自动装箱和自动拆箱

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java自动装箱和自动拆箱

Java自动装箱和自动拆箱 自动装箱和自动拆箱的定义
在java中所有的类都是对象,但是有八种基本数据类型是例外.这八种基本数据类型 byte ,short,int,long,char,float,double,boolean 都不具备对象的特性,即不携带属性,没有方法可以调用.为了解决这个问题,javaJava为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes).
Java有基本类型和包装类型之说,基本类型就是byte、int这一类的,包装类型就是Byte、Integer这一类的,自动装箱就是把一个int的值赋值给Integer。自动拆箱就是把Integer的值赋值给int
//自动装箱
Integer a = 123;
//自动拆箱
int b = a;

具体的基本类型为:

基本数据类型包装类
intInteger
byteByte
shortShort
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean
实际原理

通过以下代码可以看出他是返回了一个Integer的对象来替代int,改方法会缓存-128~127之间的值,如果值超过了的话就返回一个新的对象。如果没有超过的话就返回缓存中的值
IntegerCache.cache是一个数组,里面有对应的值
IntegerCache是Integer类中的静态内部类,用于缓存数据便于节省内存、提高性能。

//这是jdk源码中创建cache数组的代码
               Integer[] c = new Integer[size];
                int j = low;
                for(int i = 0; i < c.length; i++) {
                    c[i] = new Integer(j++);
                }
    
    @IntrinsicCandidate
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

那么是不是所有的包装类型都会将数值相同的对象指向同一个内存空间吗?
事实上,只有Integer、Short、Byte、Character、Long这几个类的valueOf才会如此.
而Double、Float的valueOf则会为每个对象分配不同的内存空间

除了Integer之外,在其他包装类(例如:Byte,Short,Long等)中也存在类似的设计。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号