Java包装类,128陷阱

包装类

基本数据类型都有自己对应的包装类,因为Java本质是面向对象编程的,一切的内容在Java看来都是对象
但是基本数据类型没有类,也没有对象,这样就有了矛盾
所以诞生了基本类型的包装类

基本数据类型:

byte,short,int,long,float,double,boolean,char
对应关系:

byte:Byte

short:Short

int:Integer

long:Long

char:Character

float:Float

double:Double

boolean:boolean

包装类的好处

判空有好处

自动装箱和自动拆箱机制

基本类型和它对应的包装类,是等价的

java 复制代码
Integer b = 10;// 不会报错,自动装箱
int a = b;// 不会报错,自动拆箱

自动装箱

java 复制代码
// int转为Integer
Integer b = 10;// 不会报错,自动装箱
Integer b = Integer.valueOf(10);// 编译后其实是执行了valueOf方法

所以自动装箱的本质,其实就是自动执行了valueOf方法
包装类和基本类型用equals比较大小时,基本类型会自动装箱

自动拆箱

java 复制代码
Integer b = 10;
int a = b;// 不会报错,自动拆箱

包装类和基本类型用==比较大小时,包装类会自动拆箱

自动装箱/拆箱面试常考:128陷阱

关于128陷阱,我之前有一篇博客写的很清楚,甚至分析了源码,有兴趣的读者可以去看看

Java包装类:128陷阱------源码分析

和valueOf相关,也就是说和自动装箱息息相关

Integer类里面会使用IntegerCache类的静态缓存池(是一个数组),Integer的值大小在-128~127之内时,值相等的不同的Integer对象的堆内存地址相同

Byte,Short,Long类也存在类似的cache机制

面试问到128陷阱,我们应该怎么回答?

小测验

答案:

true

true

false

true

true

false

true

相关推荐
茉莉玫瑰花茶2 分钟前
知识库的构建 [ 3 ]
开发语言·python
旧梦95274 分钟前
Java 枚举类详解:从基础语法到高级用法
java·开发语言·python
yivifu4 分钟前
查拼音程序升级版
开发语言·python
小灰灰搞电子9 分钟前
分享自己写的一个通信协议源码,支持C++和C,双包头+不定长
c语言·开发语言·c++
Brilliantwxx22 分钟前
【C++】初入嵌入式C++复习-----经典面试题100道
开发语言·c++·算法·面试·职场和发展
Freak嵌入式31 分钟前
告别死循环!Pico 外部中断控制 LED,比轮询高效 100 倍
java·开发语言·stm32·单片机·嵌入式硬件
nangonghen31 分钟前
Agent如何传递不同类型的ID给MCP Server
开发语言·python
2601_9621229736 分钟前
解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南
java·tomcat·intellij-idea
luj_176843 分钟前
断舍离中的项目管理智慧
c语言·开发语言·c++·经验分享·算法
码视野1 小时前
基于 Spring Boot + Vue3 的【城市雨污水管网液位淤积溯源与立交桥下穿隧洞防汛排涝智控中台】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端