我需要在这里将字符转换为int类型的原因是什么:
Integer integer= (int) 'a';
但我不需要在这里施放:
int i='a';
答案 0 :(得分:5)
根据Java Language Specification 5.1.7. Boxing Conversion
拳击转换将基本类型的表达式转换为引用类型的相应表达式。具体来说,以下九个转换称为装箱转换:
从类型布尔值到类型布尔
从类型字节到类型字节
从短类型到短类型
从char类型到Character
从int类型到Integer类型
从long类型到Long
从float类型到Float类型
从double类型到Double
从null类型到null类型
此规则是必要的,因为条件运算符(第15.25节)将装箱转换应用于其操作数的类型,并将结果用于进一步的计算。
答案 1 :(得分:2)
在Java中'int'(基本类型)与Integer(对象类型)不同,所以在你转换时首先将'a'转换为int类型然后转换为Integer类型(int类型的变量被接受一个整数对象)
答案 2 :(得分:1)
有几种类型可以保存“整数”值(从数学的角度来看):byte
,short
,int
,long
。它们之间的区别仅在于它们在内存中占用的字节数,即最大值和最小值。
所有这些都是原语。可以将较小的基元分配给相应的较高基元而不进行转换。
类型char
与short
几乎相同。它存储相应的unicode字符的代码。因此,文字a
实际上代表字符a
的代码,因此可以分配给任何整数类型。但是,一旦将其分配给char
变量,它实际上只是一个代码,因此可以在不进行转换的情况下分配给int
。
Integer
,Long
,Short
,Character
等类型实际上是原始包装器:它们是包装基元的常规类。在java 5之前你不能写:
Integer ii = 5;
你必须写
Integer ii = Integer.intValue(5);
Java 5引入了 autoboxing :为您带来魔力的功能。这意味着文字5
在编译时只被Integer.intValue(5)
之类的行替换。
因此,文字a
被Character.charValue('a')
取代。此次预测会返回Character
类型,但绝对无法将其分配给Integer
变量。转换为int
会解决问题:在这种情况下,文字a
会转换为int
类型,然后通过自动装箱转换为Integer
,因此可以将Intger
分配给{{1}}变量。
答案 3 :(得分:0)
这是基本类型和引用类型的区别。 基本类型JVM可以自动转换类型, 但必须手动转换参考类型。