Java装箱和拆箱

装箱和拆箱

装箱:把基本数据类型转换为包装类对象,为了使用专门为对象设计的API和特性
拆箱:把包装类对象转为基本数据类型,一般是因为需要运算,Java中的大多数运算符是为基本数据类型设计的。比较、算术等

包装类

基本数据类型的变量不是对象. 为了满足万物皆对象的理念,就需要对基本数据类型的变量进行打包封装处理变成对象

基本类型长度取值范围默认值包装类
byte1个字节(8位)0Byte
short2字节[-215,215-1]0Short
int4字节[-231,231-1]0Integer
long8字节[-263,263-1]0Long
boolean理论1位实际1个字节falseBoolean
char2字节\u0000Character
float4字节0.0Float
double8字节0.0Double

自动装箱和拆箱(编译阶段)

package com.walker.box;

public class BoxTest {

    public static void main(String[] args) {
        int i = 10;
        Integer m = 100;
        int n = m;
    }
}
> javap -c .\BoxTest.class
Compiled from "BoxTest.java"
public class com.walker.box.BoxTest {
  public com.walker.box.BoxTest();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: bipush        10
       2: istore_1
       3: bipush        100
       5: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       8: astore_2
       9: aload_2
      10: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      13: istore_3
      14: return
}

查看字节码文件

  • 装箱时调用Integer.valueof方法
  • 拆箱调用Integer.intValue方法

说明

  1. 当包装类型跟基本类型进行比较,或者计算的时候,都会进行拆箱为基本类型(Integer-> int)
  2. 如果 两个都是包装类型,如:Integer,那么会直接比较。但是判断相等不建议使用“==”,建议使用equals
  3. 但凡涉及到算术运算的时候,都会进行自动拆箱
  4. 如果是equals,那就都是引用类型。会自动装箱
  5. 基本数据类型不是面向对象的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值