java动装箱与拆箱原理简单分析

java中本着一切皆对象的原则,Java为每种基本数据类型都提供了对应的包装器类型。

装箱:将基本类型用他们对应的引用类型包装起来。拆箱:将包装类型转为基本数据类型。
java提供了自动拆箱和自动装箱。下面我们通过代码来看下二者在java中的实现。

看如下代码:

public class App 
{
	public static void main(String[] args) {
		Integer aInteger=3;
		int b=new Integer(5);
	}

}

这段代码就两行。从这里我们能直观地看到自动拆箱和自动装箱。但是为什么一个数值可以赋值给一个对象,而一个对象又为什么能直接赋值给一个数值类型。

我们通过cmd来到该class文件的当前路径,执行。javap -help 看下java为我们提供的帮助指令:

C:\Users\Administrator>javap -help
用法: javap <options> <classes>
其中, 可能的选项包括:
  -help  --help  -?        输出此用法消息
  -version                 版本信息
  -v  -verbose             输出附加信息
  -l                       输出行号和本地变量表
  -public                  仅显示公共类和成员
  -protected               显示受保护的/公共类和成员
  -package                 显示程序包/受保护的/公共类
                           和成员 (默认)
  -p  -private             显示所有类和成员
  -c                       对代码进行反汇编
  -s                       输出内部类型签名
  -sysinfo                 显示正在处理的类的
                           系统信息 (路径, 大小, 日期, MD5 散列)
  -constants               显示最终常量
  -classpath <path>        指定查找用户类文件的位置
  -cp <path>               指定查找用户类文件的位置
  -bootclasspath <path>    覆盖引导类文件的位置

我们选择 -c 选项,对代码进行反汇编。

执行  javap -c App,结果如下:

public class com.jin.rpc_client.App {
  public com.jin.rpc_client.App();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_3
       //调用Integer的静态方法valueOf
       1: invokestatic  #15                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       4: astore_1
       5: new           #16                 // class java/lang/Integer
       8: dup
       9: iconst_5
      10: invokespecial #21                 // Method java/lang/Integer."<init>":(I)V
      //调用Integer的静态方法intValue
      13: invokevirtual #24                 // Method java/lang/Integer.intValue:()I
      16: istore_2
      17: return
}

现在我们知道了,原来自动装箱和自动拆箱,就是java在编译时自动将我们的代码编译成了去调用相应的静态方法。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值