元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 基础

    • Java随记
    • Java到底是值传递还是引用传递?
    • Java中的自动装拆箱是什么?
      • 一、什么是自动拆装箱?
    • Java中比较大小的方式
    • Java中的泛型是什么
  • 并发编程

  • JVM

  • Java基础
  • 基础
元月
2022-11-23
目录

Java中的自动装拆箱是什么?

# Java中的自动装拆箱是什么?

# 一、什么是自动拆装箱?

  • 装箱:将基本数据类型转换为包装类型;
  • 拆箱:将包装类型转换为基本数据类型;

示例一:

Integer a = 10;  //装箱 `Integer a = 10` 等价于 `Integer a = Integer.valueOf(10)`
int b = a;   //拆箱 `int b = a` 等价于 `int b = a.intValue()`;
1
2

示例二:

Integer a = 10;
int b = 10;
System.out.println(a == b);//true 会自动拆箱,因此可以直接判断是否相等,不需要用 equal
1
2
3

示例三:

Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);

System.out.println("i1=i2   " + (i1 == i2));//true
System.out.println("i1=i2+i3   " + (i1 == i2 + i3));//true
System.out.println("i1=i4   " + (i1 == i4));//false
System.out.println("i4=i5   " + (i4 == i5));//false
System.out.println("i4=i5+i6   " + (i4 == i5 + i6));//true
System.out.println("40=i5+i6   " + (40 == i5 + i6));//true

1
2
3
4
5
6
7
8
9
10
11
12
13
14

语句 i4 == i5 + i6,因为+这个操作符不适用于 Integer 对象,首先 i5 和 i6 进行自动拆箱操作,进行数值相加,即 i4 == 40。 然后 Integer 对象无法与数值进行直接比较,所以 i4 自动拆箱转为 int 值 40,最终这条语句转为 40 == 40 进行数值比较。

从字节码中,我们发现装箱其实就是调用了 包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法。

注意:如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。

Java到底是值传递还是引用传递?
Java中比较大小的方式

← Java到底是值传递还是引用传递? Java中比较大小的方式→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式