当前位置: 首页 > ds >正文

【Java学习笔记】包装类

包装类(Wrapper)

1. 介绍

2. 分类和继承关系

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


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

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

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

(3)底层调用的方法

(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

两种方法

代码示例

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)数据在范围内:引用相同的缓存对象

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只要有基本数据类型,判断的是值是否相等

http://www.xdnf.cn/news/12752.html

相关文章:

  • STM32开发中,线程启动异常问题排查简述
  • Linux下VSCode开发环境配置(LSP)
  • Docker容器部署elasticsearch8.*与Kibana8.*版本使用filebeat采集日志
  • 基于Python学习《Head First设计模式》第七章 适配器和外观模式
  • CppCon 2015 学习:Intro to the C++ Object Model
  • 能上Nature封面的idea!强化学习+卡尔曼滤波
  • Appium+python自动化(十二)- Android UIAutomator
  • [TI板]MSPM0G3507学习笔记(一) 超详细keil环境配置+烧录配置+空工程迁移+vscode配置+点灯
  • PyCharm集成Conda环境
  • 北大开源音频编辑模型PlayDiffusion,可实现音频局部编辑,比传统 AR 模型的效率高出 50 倍!
  • 【网站建设】网站 SEO 中 meta 信息修改全攻略 ✅
  • OkHttp 3.0源码解析:从设计理念到核心实现
  • SOC-ESP32S3部分:33-声学前端模型ESP-SR
  • 开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
  • Mac版Visual Studio Code Copilot 无法使用的解决方法
  • FSMC扩展外部SRAM
  • 服务器新建用户无法使用conda
  • 【python与生活】如何构建一个解读IPO招股书的算法?
  • QT进阶之路:带命名空间的自定义控件在Qt设计器与qss中的使用技巧
  • Android音频开发:Speex固定帧与变长帧编解码深度解析
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • k3s入门教程(集群部署、使用,镜像拉取失败网络问题排查)
  • C++.OpenGL (2/64)你好,三角形(Hello Triangle)
  • N2语法 列挙、話題提出
  • 黑盒测试用例设计方法-全
  • gvim比较两个文件不同并合并差异
  • 【三余升序数对个数】2022-4-17
  • 数学:学好数学需要对数系进行系统的对比和分析
  • 蓝牙技术栈BR/EDR和LE详解
  • Linux驱动学习day1