Java 包装类 自动装箱和拆箱

 

包装类(Wrapper Class)

  包装类是针对于原生数据类型的包装

  因为有8个原生数据类型,所以对应有8个包装类。

  所有的包装类(8个)都位于java.lang下。

  Java中的8个包装类分别是:Byte, Short, Integer, Long, Float, Double, Character, Boolean,它们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。

  下面以主要Integer类为例说明。

 

Integer

  Integer类将int类型的值包装到一个对象中。

  Integer通过下面这个构造方法构造相应的整型数的对象:

  public Integer(int value);

  public int intValue()方法则返回这个包装类所包装的整型值。

 

自动装箱/拆箱(Autoboxing/unboxing)

  JDK5.0的一个新特性是自动装箱和自动拆箱。

  自动装箱/拆箱大大方便了基本类型数据和它们包装类的使用。

  自动装箱:基本类型自动转为包装类(int >> Integer)

  自动拆箱:包装类自动转为基本类型(Integer >> int)

 

  比如下面的例子:

复制代码
import java.util.ArrayList;
import java.util.Collection;

public class BoxTest
{
    public static void main(String[] args)
    {
        Collection<Integer> c = new ArrayList<Integer>();
    
        c.add(3);//将int类型的3转换为Integer类型并放到集合当中        
    }
}
复制代码

 

缓存

  下面这个程序很奇怪:

  

复制代码
public class BoxTest2
{
    public static void main(String[] args)
    {
        Integer i1 = 200;
        Integer i2 = 200;

        if (i1 == i2)
        {
            System.out.println("i1 == i2");

        }
        else
        {
            System.out.println("i1 != i2");

        }
    }

}
复制代码

 

  当两个数都是100的时候==判断相等,当两个数都是200的时候判断不相等。

  查看内部实现代码可知,Integer类有一个缓存,它会缓存-128~127之间的整数

  当调用valueOf的时候,不会生成新的对象,而是从缓存中取出对象。这样可以提高性能。

  使用构造方法的时候肯定会生成新的对象。

posted @   圣骑士wind  阅读(8896)  评论(2编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示