【Java学习笔记】包装类

包装类(Wrapper)

1. 介绍

  • (1)针对八种基本数据类型相应的引用类型 --> 包装类

  • (2)有了类的特点,就可以调用类中的方法

2. 分类和继承关系

基本数据类型包装类父类
booleanBooleanObject
charCharacterObject
byteByteNumber
shortShortNumber
intIntegerNumber
longLongNumber
floatFloatNumber
doubleDoubleNumber

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


一、包装类和基本数据类型的相互转换(装箱和拆箱

(1)jdk5 前手动装箱和拆箱方式, 装箱:基本类型->包装类型,反之,拆箱

(2)jdk5 以后(含 jdk5)的自动装箱和拆箱方式

(3)底层调用的方法

  • 自动装箱:valueOf()方法

  • 自动拆箱:intValue()方法

(4)下面以Integer举例,其他包装类的方法类似,不一一举例

1. 装箱(int --> Integer)

int n = 10;

// 方式一
Integer integer = Integer.valueOf(n);

// 方式二
Integer integer1 = new Integer(n);

2. 拆箱(Integer --> int)

int n = 10;

// 装箱
Integer integer = Integer.valueOf(n);

// 拆箱
int n1 = integer.intValue();

3. 自动装箱和插箱

int n = 10;

// 自动装箱
Integer integer = n; // 底层调用 valueOf() 方法

// 自动拆箱
int n1 = integer; // 底层调用 intValue() 方法

实现自动的原理:在底层会调用相应的方法


二、包装类和String 类的相互转换

1. Integer --> String的三种方法

  • (1)使用字符串串拼接

  • (2)使用Integer.toString()方法

  • (3)使用String.valueOf()方法

    • String.valueOf()方法在底层接收的是一个对象,而Integer刚好就是一个对象

代码示例

Integer integer = 5; // 自动装箱

// Integer --> String

// 方法一
String str1 = integer + "";

// 方法二
String str2 = integer.toString();

// 方法三
String str3 = String.valueOf(integer);

2. String --> Integer

两种方法

  • (1)使用Integer.parseInt()方法(自动装箱

    • 解读:parseInt()方法返回int类型本质还是把int类型赋值给Integer类型,实现了自动装箱

  • (2)使用构造器,创建Integer对象

代码示例

String str = "123";

Integer integer1 = Integer.parseInt(str); // 使用自动装箱

Integer integer2 = new Integer(str); // 使用构造器

三、Integer类和Character类的一些常用方法

说明:下面举例说明,对于其他类型的大同小异

方法描述
Integer.MIN_VALUE返回整数的最小值
Integer.MAX_VALUE返回整数的最大值
Character.isDigit(char)判断字符是否为数字
Character.isLetter(char)判断字符是否为字母
Character.isUpperCase(char)判断字符是否为大写字母
Character.isLowerCase(char)判断字符是否为小写字母
Character.isWhitespace(char)判断字符是否为空格
Character.toUpperCase(char)将字符转换为大写字母
Character.toLowerCase(char)将字符转换为小写字母

代码示例

public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE); // 返回最小值
        System.out.println(Integer.MAX_VALUE); // 返回最大值

        System.out.println(Character.isDigit('a')); // 判断是不是数字
        System.out.println(Character.isLetter('a')); // 判断是不是字母
        System.out.println(Character.isUpperCase('a')); // 判断是不是大写
        System.out.println(Character.isLowerCase('a')); // 判断是不是小写

        System.out.println(Character.isWhitespace('a')); // 判断是不是空格
        System.out.println(Character.toUpperCase('a')); // 转成大写
        System.out.println(Character.toLowerCase('A')); // 转成小写
    }
}

// 运行结果
-2147483648 // 返回最小值
2147483647 // 返回最大值
false // 判断是不是数字
true // 判断是不是字母
false // 判断是不是大写
true // 判断是不是小写
false // 判断是不是空格
A // 转成大写
a // 转成小写

四、Integer的创建机制底层源码探究

源码如下

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

继续追源码,可以得到:low:-127、high:128

int --> Integer底层机制的解释

  • (1)值在 -128 --> 127 范围内会使用缓存池,当两个 Integer 对象的值在这个范围内时,它们会引用相同的缓存对象(存储在Cache数组中)

  • (2)如果数值超出范围,转换时,底层会创建Integer对象

代码示例

(1)数据在范围内:引用相同的缓存对象

Integer integer1 = 1;
Integer integer2 = 1;
System.out.println(integer1 == integer2);

// 输出结果
true

(2)数据不再范围内:创建Integer对象

Integer integer1 = 128;
Integer integer2 = 128;
System.out.println(integer1 == integer2);

// 输出结果
false

五、题目练习

1. 易错题

(1)第一题

Object obj1 = true ? new Integer(1) : new Double(2.0);
System.out.println(obj1);

输出:1.0

解释:三元运算符看成一个整体double优先级最高,所以输出double(遵循自动类型转换中的自动提升原则

自动提升原则:表达式结果的类型自动提升为操作数中最大的类型

int result = true ? 1 : 2.5;
System.out.println(result);

输出:1.0

(2)第二题

Object obj2;
if (true) {
    obj2 = new Integer(1);
} else {
    obj2 = new Double(2.0);
}
System.out.println(obj2);

输出:1

2. 综合题

在这里插入图片描述

在这里插入图片描述

答案

在这里插入图片描述

总结

(1)如果是在范围内:是同一个对象

(2)如果超出范围或者new:只要是创建了对象就不是同一个对象

(3)intInteger只要有基本数据类型,判断的是值是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jackson凌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值