【java数据结构】包装类的认识

前言~🥳🎉🎉🎉  

 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 

💥个人主页:E绵绵的博客
💥所属专栏:JAVA知识点专栏   JAVA题目练习  c语言知识点专栏   c语言题目练习

我们在java最开始学习时就提过包装类这个概念,不过由于当时我们学习较浅,还不清楚这是什么。到了现在学习数据结构时,有很多知识要用到包装类,所以我们在这就重点讲一下包装类。开始出发吧!

包装类的概念 

❤️❤️在Java中,由于基本类型不是继承自Object(基本类型不是类,所以不继承),为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。

基本数据类型和对应的包装类 

❤️❤️除了 Integer和Character, 其余基本类型的包装类都是首字母大写。

装箱和拆箱 

❤️❤️对于装箱和拆箱我们就拿Integer来举例,其他的包装类所用的方法都是跟Integer一样的 

装箱 

int i = 10;
 
// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i);
Integer ij = new Integer(i);

​

❤️❤️这两种操作都属于装箱操作,对于valueOf其内部含有new ,我们可以看下valueof源码:

拆箱 

int i = 10;
 
// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i); 
// 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();

💥💥将Integer拆箱成整数我们是用intvalue这个方法去操作,对于Double,Boolean等包装类将其拆箱成对应基本类型都有各自对应的方法如doublevalue和booleanvalue。

当然我们还可以将integer拆箱成浮点数,就是用doublevalue方法去操作,这里还有很多其他方法能将integer拆箱成其他类型。(其他包装类也是类似的)

下面我们看下Integer内部的doublevalue和intvalue代码:

自动装箱和自动拆箱 

❤️❤️可以看到在使用过程中,装箱和拆箱带来不少的代码量,所以为了减少开发者的负担,java 提供了自动机制。

自动装箱 

❤️❤️自动装箱的实现是通过Java编译器在编译时进行的。当我们将一个基本数据类型赋值给对应的包装类对象时,编译器会自动调用该包装类的valueOf()方法来进行装箱操作,无需手动使用(注意是valueOf方法) 例如,将一个int类型的值赋给Integer对象时,编译器会自动调用Integer.valueOf()方法进行装箱。 

Integer num = 10; // 自动装箱

自动拆箱 

❤️❤️自动拆箱(Autoboxing)是指当我们将一个包装类对象赋值给一个基本数据类型变量时,编译器会自动进行拆箱操作,自动调用对应的方法来将包装类对象转换为基本数据类型,无需我们手动使用该方法。例如,我们可以直接将一个Integer对象赋值给int类型的变量,而不需要显式地调用intValue()方法进行转换。

Integer num = 10; 
int value = num; // 自动拆箱

❤️❤️我们看下自动装箱和自动拆箱汇编后的字节码

 分析上图可以得出其的确自动调用了valueOf和intvalueof方法。

🎯🎯经典题目

​
public static void main(String[] args) {
    Integer a = 127;
    Integer b = 127;
 
    Integer c = 128;
    Integer d = 128;
 
    System.out.println(a == b);//输出true
    System.out.println(c == d);//输出false
}

​

🎯🎯上述代码为什么输出如上结果。

这是因为自动装箱会自动调用valueof方法,用它来创建包装类。这时候我们就该看下valueof内部的源码(前面就展示过)

由上述代码可知127在-128到127中,所以返回的是Integer数组里的一个Interger包装类,因为他们都是127,所以返回了相同的包装类(地址一样),所以是相等的,返回true。

而对于128不在该范围内,所以自己就单独new了一个对象,这两个因为都是128,所以就单独new了两个对象,将其用==比较,因为它们地址不同所以返回false。

所以这就是输出该结果的原因。

 总结

所以我们的包装类就结束啦,之后将给大家介绍泛型。还希望各位大佬们能给个三连,点点关注,点点赞,发发评论呀,感谢各位大佬~❤️❤️💕💕🥳🎉🎉🎉

  • 95
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 107
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值