通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别

这篇具有很好参考价值的文章主要介绍了通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别

前言

 在刷软中的时候涉及到了值传递和地址传递传参的区别,其中提到不管是将基础数据类型的变量传值给对象数据类型的变量还是反过来都属于值传递,究其原因就是期间发生了自动装箱和拆箱,所以特地去查了相关资料

一、拆装箱的实质

 以Intrger为例子
Integer i =520; 等价于Integer i = Integer.valueOf(520),jvm偷偷帮你做了转化操作(快说 谢谢jvm)
 在查阅资料中有些说是等价于 Integer i = new Integer(520)的,我自己验证了一下并不是,情况如下图
通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别


 Integer i1 = new Integer(520); int i2 = it1;

这种属于自动拆箱等价于int i2 = it1.intValue();

二、拓展

1.数值超过128的Integer装箱

通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别
Integer的数值范围在-128-127之间,如果不在这个区间则会再创建一个对象再返回,所以第二个判断是false。详情见Integer类的valueOf
通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别

2.Java内存分配

由于自动装箱拆箱的问题联想到创建对象个数,并且前辈跟我说下面的代码是创建了三个对象,很迷惑,特地去查了下相关资料

 String str1=“ab”;  str1=str1+”c“;

 原来执行String str1=“ab”的时候,jvm会去常量池找ab,如果找到,则不再创建新的对象,直接返回已存在对象的引用;如果没找到,则先创建这个对象,然后把它加入到常量池中,再将它的引用返回。同理执行 str1=str1+”c“;时会先创建c放在常量池,然后再创建abc到常量池,所以是三个对象
 如果再执行,String str2=“abc”;就不会创建对象了,直接将str2指向常量池的ab

 同样的,String s1=new String(“鲁智深”)会先在常量池里找abc,没有找到就创建。然后由于new String(),每new一个对象就会在堆中新建一个对象,不管这个值是否相同;所以是创建两个对象
 如果再执行String s2=new String(“鲁智深”)只会创建一个对象abc到堆中

存储情况如下图所示

通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别

说明:
:存放函数定义的一些基本类型的变量数据和对象的引用变量
:存放由new创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理
常量池:存放各种用final修饰的基本类型和对象型(数组集合等)的值(即常量)




钱塘江上潮信来,今日方知我是我文章来源地址https://www.toymoban.com/news/detail-443347.html

到了这里,关于通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C#学习笔记】装箱和拆箱

    在讲引用类型object的时候,我们说它是万能的,却没说它万能在哪里。 除了object为每一种变量类型提供了ToString,GetHashCode,Equals,GetType方法之外, object作为所有类型的父类,它可以实现任意变量类型到object的转换 。 一方面,使用object类型可以显式 转换到 任意类型,(其

    2024年02月14日
    浏览(28)
  • 【Java基础教程】(三十二)常用类库篇 · 第二讲:包装类 Wrapper Class——概念及用途, 自动装箱与拆箱,常用操作方法~

    在Java编程中,包装类(Wrapper Class)是一种特殊的类,它们允许将基本数据类型包装(Wrap)成对象。每个原始数据类型都有对应的包装类,例如 Integer 对应整型, Double 对应浮点型等。包装类提供了一些有用的方法和功能,方便我们操作和处理与原始数据类型相关的数据。

    2024年02月15日
    浏览(42)
  • Java中的自动装箱与自动拆箱

    在Java中,基本数据类型与其对应的封装类之间可以进行自动转换,这种特性称为自动装箱(autoboxing)和自动拆箱(unboxing)。自动装箱和自动拆箱使得我们在使用基本数据类型时更加方便,同时也提高了代码的可读性和健壮性。本文将详细介绍Java中的自动装箱和自动拆箱机

    2023年04月22日
    浏览(24)
  • C#学习系列之装箱、拆箱、自定义转化、重载运算符

    学习基础。 装箱:值类型转化为引用类型。方便统一操作和存储。 本质上就是在堆上创建了引用类型的副本,新创建的引用类型和值类型(栈中)相互独立。 拆箱:显式转化。 显式或隐式转化,变成预期类型。 隐式转换语法 显式转化语法 利用现有的某种运算符,针对自定

    2024年02月05日
    浏览(27)
  • int和Integer的区别是什么,自动装箱和自动拆箱到底是什么?

    基本类型 vs. 包装类型: int 是Java的基本数据类型,它直接存储整数值,不具备任何方法或属性。基本类型通常更高效,占用更少的内存。 Integer 是 int 的包装类,它是一个对象,具有方法和属性。包装类提供了一些额外的功能,如转换为其他数据类型、比较、转换为字符串等

    2024年02月08日
    浏览(29)
  • 数据结构----基本封装、包装类、装箱与拆箱、泛型详解

    在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 除了 Integer 和 Character, 其余基本类型的包装类都是

    2024年01月23日
    浏览(35)
  • Java 装箱拆箱原理 & 包装类型缓存池

    byte short int long float double boolean char 为了让上述基本数据类型可以转为对象,Java在1.5推出了一系列包装类,基本类和包装类互相转换的过程,称为装箱和拆箱 缓存池也叫常量池。它是事先存储一些常量数据用以提高性能节省空间的一种技术,大部分的包装类型都实现了缓存池

    2024年02月16日
    浏览(29)
  • C# 一看就懂的装箱拆箱案例

    在C#中,装箱(Boxing)和拆箱(Unboxing)是值类型与引用类型之间相互转换的过程。 当一个值类型(如整数、结构体或枚举等)需要转换为对象(System.Object)或接口类型时,系统会自动创建一个新的对象实例,并将该值类型变量的值复制到新创建的对象中。这个过程就称为装

    2024年02月02日
    浏览(30)
  • 在JavaScript中的防抖函数 - 通过在React中构建自动完成功能来解释

    当你将一个新应用推向生产环境时,你希望确保它用户友好。网站的性能是用户体验的关键部分。每个用户都希望网站及其内容能够快速加载。每一秒都是宝贵的,可能导致用户再也不会访问你的网站。 在本指南中,我们将了解JavaScript中一个非常重要的技术,即防抖函数。

    2024年02月19日
    浏览(34)
  • Netty自定义应用层协议逃不开的粘包和拆包处理

    导致一次发送的数据被分成多个数据包进行传输,或者多次发送的数据被粘成一个数据包进行传输 使用TCP进行数据传输时,TCP是一种有序的字节流,其中是一个一个的数据报文发送到系统的缓冲区中。因此在发送端和接收端之间无法保证数据的分割和边界。这就可能导致数据

    2023年04月23日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包