我需要在这里将字符转换为 int 类型的原因是什么:
Integer integer= (int) 'a';
但我不需要在这里投射:
int i='a';
装箱转换将原始类型的表达式转换为对应的引用类型的表达式。具体来说,以下九种转换称为拳击转换:
从布尔类型到布尔类型
从类型字节到类型字节
从短型到短型
从 char 类型到 Character 类型
从 int 类型到 Integer 类型
从 long 类型到 Long 类型
从浮点型到浮点型
从双精度型到双精度型
从空类型到空类型
此规则是必要的,因为条件运算符(第 15.25 节)将装箱转换应用于其操作数的类型,并在进一步的计算中使用结果。
在 Java 中,“int”(原始类型)与 Integer(对象类型)不同,因此当您进行强制转换时,您首先将“a”转换为 int 类型,然后转换为 Integer 类型(来自 int 类型的变量被 Integer 对象接受)
有几种类型可以保存“整数”值(从数学的角度来看):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
变量。
这是基本类型和引用类型的区别。基本类型 JVM 可以自动转换类型,但引用类型必须手动转换。