为什么我需要为Integer变量转换一个字符而不是为int转换?

时间:2013-09-12 02:57:09

标签: java casting

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

Integer integer= (int) 'a';

但我不需要在这里施放:

int i='a';

4 个答案:

答案 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)

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

所有这些都是原语。可以将较小的基元分配给相应的较高基元而不进行转换。

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

IntegerLongShortCharacter等类型实际上是原始包装器:它们是包装基元的常规类。在java 5之前你不能写:

Integer ii = 5;

你必须写

Integer ii = Integer.intValue(5);

Java 5引入了 autoboxing :为您带来魔力的功能。这意味着文字5在编译时只被Integer.intValue(5)之类的行替换。

因此,文字aCharacter.charValue('a')取代。此次预测会返回Character类型,但绝对无法将其分配给Integer变量。转换为int会解决问题:在这种情况下,文字a会转换为int类型,然后通过自动装箱转换为Integer,因此可以将Intger分配给{{1}}变量。

答案 3 :(得分:0)

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