2

我需要在这里将字符转换为 int 类型的原因是什么:

Integer integer= (int) 'a';

但我不需要在这里投射:

int i='a';
4

4 回答 4

5

根据Java 语言规范 5.1.7。拳击转换

装箱转换将原始类型的表达式转换为对应的引用类型的表达式。具体来说,以下九种转换称为拳击转换:

从布尔类型到布尔类型

从类型字节到类型字节

从短型到短型

从 char 类型到 Character 类型

从 int 类型到 Integer 类型

从 long 类型到 Long 类型

从浮点型到浮点型

从双精度型到双精度型

从空类型到空类型

此规则是必要的,因为条件运算符(第 15.25 节)将装箱转换应用于其操作数的类型,并在进一步的计算中使用结果。

于 2013-09-12T03:01:26.570 回答
2

在 Java 中,“int”(原始类型)与 Integer(对象类型)不同,因此当您进行强制转换时,您首先将“a”转换为 int 类型,然后转换为 Integer 类型(来自 int 类型的变量被 Integer 对象接受)

于 2013-09-12T03:02:47.847 回答
1

有几种类型可以保存“整数”值(从数学的角度来看):byte, short, int, long. 它们之间的区别只是它们在内存中占用的字节数,即最大值和最小值。

他们都是原始人。较小的基元可以分配给相应的较高的基元,而无需强制转换。

类型char几乎相同short。它存储相应的unicode字符的代码。因此literala实际上代表了字符的代码,a因此可以分配给任何整数类型。但是,一旦将其分配给char变量,它实际上只是一个代码,因此可以在int不强制转换的情况下分配给它。

Integer, Long, Short,之类的类型Character实际上是原始包装器:它们是包装原始物的常规类。在 java 5 之前你不能写:

Integer ii = 5;

你必须写

Integer ii = Integer.intValue(5);

Java 5 引入了自动装箱:为您带来神奇的功能。这意味着文字5只是Integer.intValue(5)在编译时被替换为行。

因此,文字a被替换为Character.charValue('a'). 此表达式返回Character绝对不能分配给Integer变量的类型。转换为int解决它:在这种情况下,文字a被转换为 type int,然后Integer通过自动装箱转换为,因此可以分配给Intger变量。

于 2013-09-12T03:03:28.783 回答
0

这是基本类型和引用类型的区别。基本类型 JVM 可以自动转换类型,但引用类型必须手动转换。

于 2013-09-12T03:09:20.883 回答