自动装箱和拆箱_自动装箱

自动装箱和拆箱

自Java 1.5以来,所有Java开发人员都可以使用自动装箱功能。嗯,我可能太乐观了。 至少所有开发人员都应该可以使用自动装箱。 毕竟,在ORACLE页面上有一个很好的教程。

自动装箱是指Java编译器在需要时自动从原始类型创建用于创建对象的代码的现象。 例如,您可以编写:

Integer a = 42;

它将自动生成将值int 42放入Integer对象的JVM代码。 编译器为我们做到这一点真是太好了,以至于一段时间后,程序员往往会忘记它背后的复杂性,而我们有时会碰壁。

例如,我们有double.classDouble.class 。 它们都是对象(作为一个类,每个类本身都是permgen中的对象,或者只是后permgen版本的JVM中的堆)。 这两个对象均为Class类型。 而且,由于Java 1.5都属于Class<Double>类型。

如果两个对象具有相同的类型,那么它们也必须是赋值兼容的。 似乎是一个显而易见的陈述。 如果您有对象O a和对象O b则可以指定a = b

查看代码,但是我们可能会发现遗忘而不是显而易见:

public class TypeFun {public static void main(String[] args) {// public static final Class<Double>   TYPE = (Class<Double>)Class.getPrimitiveClass("double");System.out.println("Double.TYPE == double.class: " + (Double.TYPE == double.class));System.out.println("Double.TYPE == Double.class: " + (Double.TYPE == Double.class));System.out.println("double.class.isAssignableFrom(Double.class): " + (double.class.isAssignableFrom(Double.class)));System.out.println("Double.class.isAssignableFrom(double.class): " + (Double.class.isAssignableFrom(double.class)));}
}

结果:

Double.TYPE == double.class: true
Double.TYPE == Double.class: false
double.class.isAssignableFrom(Double.class): false
Double.class.isAssignableFrom(double.class): false

这意味着Double的原始对是double.class (不足为奇)。 即使不能从另一个分配一个。 我们至少可以查看其中之一的来源。 Double类的源代码位于RT.jar中,并且是开源的。 在那里,您可以看到:

public static final Class<Double>	TYPE = (Class<Double>) Class.getPrimitiveClass("double");

为什么使用奇怪的Class.getPrimitiveClass("double")而不是double.class ? 那就是Double类型的原始对。

答案并不简单,您可以深入研究Java和JVM的细节。 由于double不是一个类,因此实际上没有像double.class这样的类。 但是,您仍然可以在Java源代码中使用此文字,并且Java语言,编译器和运行时具有很强的约束力。 编译器知道Double类定义了一个名为TYPE的字段,该字段表示其原始类型。 每当编译器在源代码中看到double.class ,它都会生成JVM代码Double.TYPE (尝试一下,然后使用javap解码生成的代码!)。 因此,RT的开发人员无法编写:

public static final Class<Double>	TYPE = double.class;

进入Double类的源代码。 它将编译为等效的代码:

public static final Class<Double>	TYPE = TYPE;

那么自动装箱如何进行? 来源:

Double b = (double)1.0;

结果:

0: dconst_1      1: invokestatic  #2                  // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;4: astore_1

但是,如果我们替换两个“ d”字母:

double b = (Double)1.0;

然后我们得到:

0: dconst_1      1: invokestatic  #2                  // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;4: invokevirtual #3                  // Method java/lang/Double.doubleValue:()D7: dstore_1

进食可以解释很多事情。 double.class类和Double.class类的实例不分配兼容。 自动装箱解决了这个问题。 Java 4很久以前了,幸运的是我们忘记了它。

您的作业:重读带有“类”类型和相应原始类型参数的方法时,重读与自动装箱相关的事情。

翻译自: https://www.javacodegeeks.com/2014/09/autoboxing.html

自动装箱和拆箱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络标准体系,计算机网络标准体系结构实验报告.doc

华北电力大学实 验 报 告||试验名称 计算机网络体系结构试验课程名称 计算机网络体系结构||专业班级&#xff1a;网络1202 学生姓名&#xff1a;学 号&#xff1a; 成 绩&#xff1a;指导老师&#xff1a;李丽芬 试验日期&#xff1a;.12.18一、试验目标和要求1&#xff0e;将网…

配置中文_星球大战:战机中队配置需求公布 支持中文

近日《星球大战》系列新作《星球大战&#xff1a;战机中队》公布&#xff0c;该作采用寒霜引擎打造&#xff0c;支持中文。游戏将于2020年10月3日发售&#xff0c;预购价格为238元&#xff0c;登陆Xbox One/PS4/PC(Steam/Origin/Epic)平台&#xff0c;有单人和多人模式&#xf…

为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?

您是否认为仅仅是因为您的Web应用程序在过渡环境中以鲜艳的色彩通过了&#xff0c;您的生产环境也将是相同的吗&#xff1f; 您可能需要重新考虑&#xff01; 特别是&#xff0c;如果我们指的是跨浏览器测试 &#xff0c;则需要确保跨各种操作系统&#xff0c;运行在不同操作系…

手机usb共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?小编教你共享方法...

曾经就有过这样的情况&#xff0c;家里突然断网了&#xff0c;这时又需要打开电脑接收文件&#xff0c;或是需要在线编辑公众号的文章&#xff0c;着急得很&#xff0c;这时电脑没有网络怎么办呢&#xff1f;能不能使用手机的流量&#xff0c;来让电脑连网呢&#xff1f;有时候…

为全局变量赋值_实例分析如何远离漫天飞舞的全局变量

前篇《由static来谈谈模块封装》基本实现了对外隐藏属性&#xff0c;隐藏局部模块函数&#xff0c;开放接口的功能。对于这个话题还有些点没有深入探讨&#xff1a;为什么要这样做&#xff1f;以及这样做的好处。或许很多刚刚开始用C或者其他面向对象编程语言(比如C)的小伙伴们…

数据库班级字段怎么定义名称_班级名称

数据库班级字段怎么定义名称在Java中&#xff0c;每个类都有一个名称。 类位于包中&#xff0c;这使我们程序员可以一起工作&#xff0c;避免名称冲突。 我可以命名我的班级A &#xff0c;也可以命名您的班级A &#xff0c;只要它们位于不同的程序包中&#xff0c;它们可以很好…

计算机指令取决,不同的计算机,其指令不同,这主要取决于什么?

不同的计算机&#xff0c;其指令系统也不同&#xff0c;这主要取决于所用的CPU。1、CPU指中央处理器&#xff0c;是一块超大规模的集成电路&#xff0c;是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。2、程…

python内存管理方法_Python 内存管理大揭秘

前言语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理&#xff0c;还是Java的垃圾回收&#xff0c;都成为语言最重要的特征。这里以Python语言为例子&#xff0c;说明一门动态类型的、面向对象的语言的内存管理方式。对象的内存使用…

Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

在之前的一系列博客中&#xff0c;我们在Kubernetes集群上启动了一个Ignite集群。 在本教程中&#xff0c;我们将使用先前在Spring Boot Application上创建的Ignite集群。 让我们使用Spring Boot创建我们的项目。 Spring Boot应用程序将连接到Ignite集群。 让我们添加依赖项…

计算机VB整除,【原创】VB中的整除运算和转换函数

前言&#xff1a;【关于四舍五入】——实际上是相对小数部分<0.5 舍&#xff1b;0.5 看整数部分&#xff0c;若为奇数则进&#xff0c;若为偶数则舍&#xff1b;>0.5 进整除运算“\”作用&#xff1a;用于对两个数进行除法运算并返回一个整数例如&#xff1a;18\53 …

栈空间_Linux中的进程栈和线程栈

1. 进程栈进程栈是属于用户态栈&#xff0c;和进程虚拟地址空间 (Virtual Address Space) 密切相关。那我们先了解下什么是虚拟地址空间&#xff1a;在 32 位机器下&#xff0c;虚拟地址空间大小为 4G。这些虚拟地址通过页表 (Page Table) 映射到物理内存&#xff0c;页表由操作…

mockito_Mockito 101

mockitoMockito是一个模拟框架&#xff0c;可让您使用简洁的API编写漂亮的测试。 它偏向于最小的规格&#xff0c;使不同的行为看起来有所不同&#xff0c;并显示清晰的错误消息。 创造嘲弄 要使用Mockito创建模拟&#xff0c;只需使用Mock注释模拟&#xff0c;然后调用Mockit…

csgo显示服务器失败,csgo服务器失败

csgo服务器失败 内容精选换一换您可以通过“应用管理”页面的应用列表&#xff0c;快速查看应用状态&#xff0c;及相关异常信息&#xff0c;如图1所示。包括&#xff1a;应用状态&#xff1a;即图1中的①应用异常信息&#xff1a;即图1中的②云服务器异常信息&#xff1a;即图…

mysql多表成绩查询_MySQL多表数据记录查询(一)

1&#xff0e;交叉连接SQL语句的语法结构如下&#xff1a;select * from表1 cross join 表2;或Select * from表1&#xff0c;表2;2.内连接SQL语句有两种表示形式&#xff1a;使用inner join 语法结构如下&#xff1a;Select表达式1&#xff0c;表达式2&#xff0c;...&#xff…

DMN中的函数式编程:感觉就像再次重读我的大学课程一样

在本文中&#xff0c;我想分享有关DMN中的递归支持的有趣见解&#xff0c;并重点介绍FEEL语言的特定属性如何使功能编程结构能够在DMN中建模。 我们将从一个基本的示例开始&#xff0c;以演示FEEL语言和DMN构造的“商业友好”性质如何使我们能够解决一个通常不愉快的问题&…

手游极品飞车无限狂飙链接服务器失败,极品飞车无极限无法联网是什么原因 联网失败原因分析及解决方法...

有些玩家对于极品飞车无极限游戏中无法联网的问题而困扰&#xff0c;应该怎么解决呢&#xff1f;下面42824小小编就把方法分享给大家&#xff01;一、极品飞车无极限游戏无法联网原因及解决方法1、网络连接不稳定推荐在wifi的情况下进行游戏&#xff0c;如果是3G网的话很容易会…

mysql索引命名规范_mysql使用规范-索引规范

(1)单张表中索引数量不超过5个。(2)单个索引中的字段数不超过5个。(3)索引名必须全部使用小写。(4)非唯一索引按照“idx_字段名称[_字段名称]”进用行命名。例如idx_age_name。(5)唯一索引按照“uniq_字段名称[_字段名称]”进用行命名。例如uniq_age_name。(6)组合索引建议包含…

junit规则_jUnit:规则

junit规则规则在测试&#xff0c;测试用例或测试套件周围增加了特殊处理。 他们可以对该类中的所有测试执行通用的其他验证&#xff0c;并发运行多个测试实例&#xff0c;在每个测试或测试用例之前设置资源&#xff0c;然后在之后拆除它们。 该规则可以完全控制将要应用到的测…

mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么

mysql中唯一索引的关键字是unique index。创建唯一索引可以避免数据出现重复。唯一索引可以有多个&#xff0c;但索引列的值必须唯一&#xff0c;索引列的值允许有空值。创建唯一索引可以使用关键字UNIQUE随表一同创建。mysql中唯一索引的关键字是unique index。(推荐教程&…

奇迹觉醒qq服务器比微信少,十年内最大的奇迹!功能比QQ还少的微信为什么能成功?...

今天&#xff0c;微信迎来了自己2021年的第一次「翻车」——2021年1月18日下午2点前后&#xff0c;「由于系统抖动原因」部分微信用户无法及时收取微信消息。截止下午3点19分&#xff0c;故障已被修复。其实微信曾面临过几次信息服务中断的事故&#xff1a;2013年&#xff0c;微…