Java包装类,中高级java面试题

装箱(装包):将简单类型变为包装类类型

拆箱(拆包):将包装类类型变为简单类型

2.1装包代码案例

//装包

public static void main(String[] args) {

//int i = 10;

Integer a = 10;//自动装包(装箱)

//Integer b = new Integer(10);//显示装包

Integer integer = new Integer(10);//显示装包

System.out.println(a);

}

那么自动装箱和自动装包的原理又是什么呢?

使

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

用Java命令是反编译代码

备注一些简单的JDK命令:javac java javap -c jconsole jmap

在这里插入图片描述

那么就进入到Integer下的源码去找valueOf方法,我们可以看到实际上是调用了这个方法,这里的valueOf方法就是实现了装包在这里插入图片描述

2.2拆包代码案例

//拆包

public static void main1(String[] args) {

Integer a = 10;

int b = a;//自动拆包

System.out.println(b);

}

同样使用JDK命令查看反编译

在这里插入图片描述

以看出拆包过程调用了Integer下的intValue方法,同样跳转去看源码是什么样的

在这里插入图片描述

也就是代码中的直接将a的值10赋值给了b然后返回

注意:拆包并不是都调用的intValue方法

代码案例

//拆包

public static void main(String[] args) {

Integer a = 10;

int b = a;//自动拆包

System.out.println(b);

long c = a.longValue();//将a拆成long类型,显示拆包

double d = a.doubleValue();//将a拆成double类型,显示拆包

System.out.println©;

System.out.println(d);

}

使用命令查看反编译

在这里插入图片描述

我们可以看出,在发生拆包的过程中,拆成什么类型的包就调用Integer下的什么类型的Vlaue方法

3常见的错误比较

判断一下a是否等于b

在这里插入图片描述当然这个是肯定为true

但是请看下面的代码

在这里插入图片描述

这里会有很多人有疑问,这是为什么,难道编译器出错了?答案当然不是,是因为区域的关系

我们再次回到源码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值