当前位置: 首页 > 知识库问答 >
问题:

Java:自动拆箱结合铸造

柴兴贤
2023-03-14

请帮我想想为什么这行不通。(这不是一个实际问题,而是OCPJP考试的心理练习。)

public class ImplicitConversions {

Integer iBoxed;
short sPrimitive = (short)iBoxed;

}

//编译器错误:类型不兼容;必需:短,找到:整数

我假设编译器尝试在没有(或之前)拆箱的情况下先进行强制转换,而例如算术操作(iBoxediBoxedi)将首先拆箱。因此,是否可以说自动装箱/取消装箱在操作顺序(一元、算术、关系、逻辑、条件、分配)中占有一席之地,它到底在哪里?

我在下面的源代码中读到了有关强制转换的内容(以确保我与1.6兼容),但我没有读到这一点。谢谢http://docs.oracle.com/javase/specs/jls/se5.0/html/conversions.html#20232

共有3个答案

翁和正
2023-03-14

自动装箱/取消装箱表达式不能与范围较宽或范围较窄的强制转换组合。

但是,您可以双重强制转换iBoxed变量:

short sPrimitive = (short) (int) iBoxed;

首先,将iBoxed变量自动取消绑定为int,然后将int转换为short

艾焕
2023-03-14

整数有一个方法。用这个代替:

short sPrimitive = iBoxed.shortValue();
闻人越
2023-03-14

(short)iBoxed

是一个独立的表达式,它不依赖于上下文。您试图做的是将一个整数参考值强制转换为基元值。这是不允许的铸造上下文。(见本章下表。)

 类似资料:
  • 本文向大家介绍自动装箱和拆箱?相关面试题,主要包含被问及自动装箱和拆箱?时的应答技巧和注意事项,需要的朋友参考一下 自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。 比如:把int转化成 Integer,double转化成 Double,等等。反之就是自动拆箱。 原始类型: boolean,char,byte,short,int,long,float,double 

  • 问题内容: 从JDK 5.0开始,自动装箱/拆箱是在Java中引入的,这种技巧很简单而且很有帮助,但是当我开始测试包装器类和原始类型之间的不同转换时,我真的很困惑自动装箱的概念在Java中的工作原理: Boxing 尝试不同的情况下后(),这是由编译器所接受的唯一情况是,当值的上做作运算符右侧的类型是int。当我查看源代码时,发现它仅实现一个带参数的构造函数。 因此,我的结论是,自动装箱的概念基于

  • 本文向大家介绍Java中自动装箱、拆箱引起的耗时详解,包括了Java中自动装箱、拆箱引起的耗时详解的使用技巧和注意事项,需要的朋友参考一下 什么是自动装箱,拆箱 先抛出定义,Java中基础数据类型与它们的包装类进行运算时,编译器会自动帮我们进行转换,转换过程对程序员是透明的,这就是装箱和拆箱,装箱和拆箱可以让我们的代码更简洁易懂 耗时问题 在说 Java 的自动装箱和自动拆箱之前,我们先看一个例子

  • 问题内容: 我已经注意到Java SE 6和Java SE 7在自动拆箱行为上的差异。我想知道为什么会这样,因为我找不到这两个版本之间这种行为变化的任何文档。 这是一个简单的例子: 使用Java SE 7中的javac可以很好地进行编译。但是,如果我给编译器指定“ -source 1.6”参数,则在最后一行会出现错误: 我尝试下载Java SE 6以使用本机版本6编译器进行编译(没有任何-sour

  • 问题内容: 自动装箱是Java编译器在原始类型及其对应的对象包装器类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换结果相反,则称为拆箱。 那么,为什么我们需要它?为什么要在Java中使用自动装箱和拆箱呢? 问题答案: 需要一些上下文来充分理解其背后的主要原因。 基元与类 Java中的原始变量包含值(整数,双精度浮点二进制数等)。由于这些

  • 本文向大家介绍Java自动拆箱空指针异常的解决,包括了Java自动拆箱空指针异常的解决的使用技巧和注意事项,需要的朋友参考一下 公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备。结果接到客户反映,某部分功能偶尔不能用。于是参与救火,与写这段代码的小伙伴一起排查原因。 最终发现导致业务偶尔不能使用是由Long类型自动拆箱导致空指针异常引起的。下面就带大家分析一下Java中基础类型的包装类在拆