网站图片优化大小,哪家公司建5g基站,个人律师网站模板,集团网站网页模板什么是包装类型
将基本类型包装进了对象中得到的类型
基本类型和包装类型有什么区别
用途不同#xff1a;基本类型一般用于局部变量#xff0c;包装类型用于其他地方存储方式不同#xff1a;用于局部变量的基本类型存在虚拟机栈中的局部变量表中#xff0c;用于成员变量…什么是包装类型
将基本类型包装进了对象中得到的类型
基本类型和包装类型有什么区别
用途不同基本类型一般用于局部变量包装类型用于其他地方存储方式不同用于局部变量的基本类型存在虚拟机栈中的局部变量表中用于成员变量的基本类型存在虚拟机堆中包装类型一般都存在堆中没有进行JIT优化时占用空间大小不同基本类型占空间小包装类型占空间大默认值不同基本类型有默认值包装类型不赋值就是null比较方式不同基本数据类型用比较的是值包装类型用比较的是地址而包装类型比较值的话需要用equals
为什么要有包装类型
笼统来说Java是面向对象语言所以应该尽可能使用对象 具体来说
包装类型可以用于泛型因为其继承于Object包装类型没有默认值这是业务场景需要的许多业务场景要求对象的属性在不赋值的情况下是null而不是具有迷惑性的默认值
什么是自动拆装箱本质是什么
定义当把一个包装类型赋值给基本类型时编译器自动取出包装类型其中的基本数据进行赋值当把一个基本类型赋值给一个包装类型时编译器自动将其包装成包装类型后再赋值 本质本质体现在字节码上其实是调用了valueof和value方法是编译器提供的语法糖
自动拆箱引发的NPE问题
场景1 数据库查询可能返回一个null是包装类型这时用基本类型接收就会发生自动拆箱调用不存在的valueOf方法从而引发NPE空指针异常 场景2 三目运算符的类型对齐可能导致自动拆箱从而引发NPE问题
包装类型的常量池技术及其作用
定义对包装类型提前创建并缓存了一部分的对象在常量池中 作用程序可能直接拿这些对象来使用不需要再new对象了节省了new对象的开销 补充
Integer i 3;
i;字节码为
0行iconst_3定义了一个int类型的3 1行调用valueOf方法装箱取得包装类型常量池中值为3的那个Integer对象 8行使用intValue拆箱 11行创建int类型的1 12行让int类型的3和int类型的1相加 13行调用valueOf方法装箱取得包装类型常量池中值为4的那个Integer对象