Java包装类

本文探讨了Java中包装类的作用,包括为何存在包装类以支持基本类型在泛型中的使用,介绍了自动装箱和拆箱的过程,以及手动操作包装类的方法。重点讲解了Integer和Character的特殊性以及valueOf方法的工作原理。
摘要由CSDN通过智能技术生成
  1. 为什么有包装类?
    在Java中,基本数据类型不是继承自Object,为了在泛型中可以支持基本数据类型,Java给每个基本数据类型都对应了一个包装类。【基本数据类型不符合面向对象思想,基本类型不是对象,从而基本数据类型都可以面向对象编程

  2. 基本数据类型和对应的包装类

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

除了int和char对应的包装类Integer、Character,其余基本类型的包装类都是首字母大写。

  1. 自动装箱和拆箱
    ①自动装箱(基本数据类型变为对应的包装类型)
        int a = 10;
        Integer i = a;
        Integer j = (Integer)a;
        System.out.println(i);
        System.out.println(j);
    }

字节码文件:
在这里插入图片描述
分析:自动装箱是在编译Integer i = a时会自动调用装箱方法Integer.valueOf(a)

②自动拆箱(包装类型变为对应的基本数据类型)

    public static void main(String[] args) {
        Integer i = 10;
        int a = i;
        int k = (int)i;
        System.out.println(a);
        System.out.println(k);
    }

字节码文件:
在这里插入图片描述
分析:自动拆箱是在编译int b = i 时会自动调用拆箱方法i.intValue()

  1. 手动装箱和拆箱
    ①手动装箱的两种方法【调用valueOf方法,new包装类对象】
    ②手动拆箱的方法【调用intValue方法】
    public static void main(String[] args) {
        int i = 10;
        Integer j = Integer.valueOf(i);
        Integer k = new Integer(i);

        int m = j.intValue();
    }
  1. 分析下面代码的输出
public static void main(String[] args) {
	Integer a = 127;
	Integer b = 127;
	
	Integer c = 128;
	Integer d = 128;
	
	System.out.println(a == b);
	System.out.println(c == d);
}

输出:true false
分析:此处涉及到自动装箱,因此底层会调用valueOf方法
在这里插入图片描述
可以发现valueOf方法有2个返回值
第一个返回值:low为-128,high为127,即传入的i值在-128到127之间会直接在cache缓存数组中返回数组元素下标值。
i+(-(-128)) = i + 128; i取-128时,下标值为0;i取127时,下标值为256。
缓存数组:
在这里插入图片描述

第二个返回值:不在if判断语句low和high的范围内,就会实例化新的对象。

因此:
当值为127的时候,并没有new包装类对象,而是直接从数组的同一个下标中取值。
当值为128的时候,new的包装类对象,则此时==号比较的时两个对象的地址。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeKnightShuai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值