iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java学习之理解自动拆装箱特性
  • 576
分享到

java学习之理解自动拆装箱特性

2024-04-02 19:04:59 576人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、自动装拆箱是什么?二、拆装箱的使用1.引入包装类的原因:2.自动拆装箱的运用3.一些典型举例一、自动装拆箱是什么? 有时,需要将int这样的基本类型转换为对象。所有

一、自动装拆箱是什么?

  • 有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类,例如 Integer类对应基本类型int。通常,这些类被称为包装器。
  • 这些包装类对应基本数据类型:
    Integer , Long , Float , Short , Byte, Charater , Boolen;
    (前六个类派生于公共的超类Number)
  • 包装类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值,同时,包装类还是final,因此不能派生他的子类。

二、拆装箱的使用

1.引入包装类的原因:

包装成对象后更加方便操作,比如可以直接封装一些方法放在类中方便使用:比如,将一个数字字符串s转换成数值 可以使用:int x = Integer.parseInt(s)或者能方便将数据加入集合:假如想要定义一个整型数组列表。遗憾的是,尖括号中的类型参数不允许是基本类型,也就是说,不允许写成如 ArrayList,这里就可以用到Integer 包装类。
我们可以声明一个Integer对象的数组列表:
ArrayList list = new ArrayList()

注:由于每个值分别包装在对象中,所以ArrayList的执行效率远低于int[ ]数组。因此,只有当操作的方便性比执行效率更重要时,才会考虑对较小的集合使用这种构造

2.自动拆装箱的运用

1.对于向ArrayList()中添加int类型的元素 就可以用到自动装箱的特性,下面这个调用:
list.add(3);
将自动变换成:
list.add(Integer.valueOf(3));
这就是 自动装箱(autoboxing)

2.相反的 当将一个Integer对象赋给一个int值时,将会自动拆箱。也就是说,编译器将以下语句:
int n=list.get(i);
转换成:
int n =list.get(i).intValue();
这就是 自动拆箱

3.一些典型举例

1.自动拆装箱适用于算术表达式。例如,可以将自增运算符应用于包装类引用:
Integer n =1;
n++;
编译器将自动插入一条对象拆箱的指令,然后进行自增运算,最后再将结果拆箱。

2.==运算符和包装类联用的注意
(以下内容谈到了 运行时常量池,如果需要搞清楚请移步这篇文章)

传送门  运行时常量池理解

(1)自动装箱常见的就是valueOf这个方法,自动拆箱就是intValue方法。在它们的源码中有一段代码定义了包装类的缓冲区。除了两个包装类Long和Double 没有实现这个缓存技术,其它的包装类均实现了它。
如下代码:


Integer i1 = 40;
Integer i2 = 40;
Double i3 = 40.0;
Double i4 = 40.0;
System.out.println("i1=i2   " + (i1 == i2));
System.out.println("i3=i4   " + (i3 == i4));

-----结果----
true
false

原理如下:
“==” 这个运算在不出现算数运算符的情况下 不会自动拆箱,所以i1 和 i 2它们不是数值进行的比较,仍然是比较地址是否指向同一块内存,在integer源码中缓冲区的范围是-128-127之间,在此范围内只要不new对象,那么数值的地址都是相同的,都在常量池区域。而Double没有设置缓冲区,自然i3 i4的地址不相同。
所以包装类对象比较时最好调用equals方法。

3.(1)由于包装类引用可以为NULL,所以自动装箱有可能会抛出一个NullPointerException异常:
eg:Integer n =null; System.out.println(2*n);
(2)另外,如果在一个条件表达式中混合使用Integer和Double类型,Integer值会拆箱,提升为double再装箱为Double;

引用--《java核心技术卷一》

以上就是java学习之理解自动拆装箱特性的详细内容,更多关于java自动拆装箱的资料请关注编程网其它相关文章!

--结束END--

本文标题: java学习之理解自动拆装箱特性

本文链接: https://www.lsjlt.com/news/135858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java学习之理解自动拆装箱特性
    目录一、自动装拆箱是什么?二、拆装箱的使用1.引入包装类的原因:2.自动拆装箱的运用3.一些典型举例一、自动装拆箱是什么? 有时,需要将int这样的基本类型转换为对象。所有...
    99+
    2024-04-02
  • Java包装类之自动装箱与拆箱
    JDK 5.0之前 基本数据类型<---->包装类:调用包装类的构造器(代码里有知识点和注意点) 转换目的:有了类的特点,就可以调用类中的方法 public clas...
    99+
    2024-04-02
  • java编程中自动拆箱与自动装箱详解
    什么是自动装箱拆箱基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = new Class(param...
    99+
    2023-05-30
    java 装箱 拆箱
  • Java的自动装箱和拆箱的概念
    本篇内容主要讲解“Java的自动装箱和拆箱的概念”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的自动装箱和拆箱的概念”吧!Java作为面向对象语言,有人认为所看到的都是对象,事实上,在J...
    99+
    2023-06-17
  • java自动装箱和自动拆箱的定义是什么
    自动装箱(Autoboxing)指的是Java编程语言中的一种特性,它允许将基本数据类型自动转换为对应的包装类类型。例如,当我们将一...
    99+
    2023-10-27
    java
  • Java的自动装箱和拆箱源码分析
    这篇“Java的自动装箱和拆箱源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java的自动装箱和拆箱源码分析”文章吧...
    99+
    2023-06-30
  • 深入浅析Java中拆箱与自动装箱的原理
    这篇文章给大家介绍深入浅析Java中拆箱与自动装箱的原理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是自动装箱和拆箱自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象...
    99+
    2023-05-31
    java 自动装箱 拆箱
  • Java自动装箱、自动拆箱与Integer缓存怎么使用
    今天小编给大家分享一下Java自动装箱、自动拆箱与Integer缓存怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1...
    99+
    2023-06-30
  • Java自动拆装箱的示例分析
    这篇文章将为大家详细讲解有关Java自动拆装箱的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、拆装箱概念所谓的拆装箱,就是自从JDK1.5之后,java的基本类型和引用类型之间的相互转换。1拆...
    99+
    2023-05-31
    java
  • JAVA新手小白学正则表达式、包装类、自动装箱/自动拆箱以及BigDecimal
    目录1 正则表达式Regex1.1 概述1.2 常见语法1.3 String提供了支持正则表达式的方法1.4 练习:测试输入身份证号2 包装类2.1 与基本类型的对应关系2.2 Nu...
    99+
    2024-04-02
  • Java基础详解之包装类的装箱拆箱
    目录一、包装类二、装箱与拆箱三、静态方法四、自动装箱与自动拆箱一、包装类 概念: Java提供了两个类型系统,基本数据类型和引用数据类型,使用基本数据类型在于效率,然而很多情况下回创...
    99+
    2024-04-02
  • 如何通过源码了解Java的自动装箱拆箱详解
    目录什么叫装箱 & 拆箱?首先看一段代码装箱(valueOf())为什么要有[-128,127]的缓存?为什么是[-128,127]?自动装箱带来的性能问题小总结拆箱(int...
    99+
    2024-04-02
  • Java详细分析讲解自动装箱自动拆箱与Integer缓存的使用
    目录1. 前言2. 包装类3. 自动装箱与自动拆箱4. Interger缓存5. 回答题目1. 前言 自动装箱和自动拆箱是什么?Integer缓存是什么?它们之间有什么关系? 先来看...
    99+
    2024-04-02
  • JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用
    本篇内容介绍了“JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 ...
    99+
    2023-06-29
  • 详谈java中int和Integer的区别及自动装箱和自动拆箱
    目录int和Integer的区别及自动装箱和自动拆箱Integer和int的对比,如下所示:自动装箱和自动拆箱:Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)...
    99+
    2024-04-02
  • Java自动装箱性能怎么用
    本篇内容主要讲解“Java自动装箱性能怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java自动装箱性能怎么用”吧!Java 的基本数据类型(int、double、 char)都不是对象。...
    99+
    2023-06-17
  • 如何解决Java自动拆箱空指针异常
    这篇文章主要讲解了“如何解决Java自动拆箱空指针异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决Java自动拆箱空指针异常”吧!问题重现下面通过一个简单的示例才重现一下异常出现的...
    99+
    2023-06-15
  • Java新特性之Nashorn_动力节点Java学院整理
    Nashorn是什么Nashorn,发音“nass-horn”,是德国二战时一个坦克的命名,同时也是java8新一代的javascript引擎--替代老旧,缓慢的Rhino,符合 ECMAScript-262 5.1 版...
    99+
    2023-05-31
    java8 新特性 nashorn
  • Java8新特性之Base64详解_动力节点Java学院整理
    BASE64 编码是一种常用的字符编码,在很多地方都会用到。但base64不是安全领域下的加密解密算法。能起到安全作用的效果很差,而且很容易破解,他核心作用应该是传输数据的正确性,有些网关或系统只能使用ASCII字符。Base64就是用来将...
    99+
    2023-05-31
    java8 base64 ava
  • Java8新特性之StampedLock_动力节点Java学院整理
    Java8就像一个宝藏,一个小的API改进,也足与写一篇文章,比如同步,一直是多线程并发编程的一个老话题,相信没有人喜欢同步的代码,这会降低应用的吞吐量等性能指标,最坏的时候会挂起死机,但是即使这样你也没得选择,因为要保证信息的正确性。所以...
    99+
    2023-05-31
    java8 新特性 stampedlock
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作