java包装类

基本数据类型包装类
byteByte
booleanBoolean
shortShort
charCharacter
intIntegar
longLong
floatFloat
doubleDouble

现提供integer类型的包装类方法使用

其他包装类的使用可以效仿,方法相同

public class TestCYClass {
    public static void main(String[] args) {
        //基本数据类型转成包装类对象
        Integer a = new Integer(4);
        Integer b = Integer.valueOf(39);
        //包装类对象转成基本数据类型
        int c = b.intValue();
        double d = b.doubleValue();
        //把字符串转成包装类对象
        Integer e = new Integer("9999");
        Integer f = Integer.parseInt("98898");
        //把包装类对象转成字符串
        String str = e.toString();
    }
}

自动装拆箱机制

可以直接实现Integer a = 8(类似)

Integer i = 100;//自动装箱
//相当于编译器自动为您作以下的语法编译:
Integer i = Integer.valueOf(100);//调用的是valueOf(100),而不是new Integer(100)
Integer i = 100;
int j = i;//自动拆箱
//相当于编译器自动为您作以下的语法编译:
int j = i.intValue();

空指针问题

public class Test1 {
    public static void main(String[] args) {
        Integer i = null;
        int j = i;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6eXMlyth-1651936306721)(ecb2994b4d868af83d82a0036f320c19.png)]

null表示i没有指向任何对象的实体,但作为对象名称是合法的(不管这个对象名称存是否指向了某个对象的实体)。由于实际上i并没有指向任何对象的实体,所以也就不可能操作intValue()方法,这样上面的写法在运行时就会出现NullPointerException错误。

三//包装类的缓存问题

整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。

缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。

public class Test3 {
    public static void main(String[] args) {
        Integer in1 = -128;
        Integer in2 = -128;
        System.out.println(in1 == in2);//true 因为123在缓存范围内
        System.out.println(in1.equals(in2));//true
        Integer in3 = 1234;
        Integer in4 = 1234;
        System.out.println(in3 == in4);//false 因为1234不在缓存范围内
        System.out.println(in3.equals(in4));//true
    }
}

true
false
true
true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tUwH6K3-1651936306723)(1f4bd4feeb0d8d41f28a1cc0e7a72e2e.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ieTXhvQC-1651936306723)(656b3b61c514ae475b470409070e33b6.png)]


1.自动装箱调用的是valueOf()方法,而不是new Integer()方法。

2.自动拆箱调用的xxxValue()方法。

3.包装类在自动装箱时为了提高效率,对于-128~127之间的值会进行缓存处理。超过范围后,对象之间不能再使用==进行数值的比较,而是使用equals方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值