在整数数组中存储值

时间:2015-05-07 07:16:44

标签: java arrays

它很简单,但我对下面的代码感到困惑,我能够存储和检索字符和字符串数组中的值,但不能从Integer中存储。

Integer[] intArray = {1,2,3,4,5}; //Type mismatch: cannot convert from int to Integer
String[] str1 = {"pk1", "pk2", "pk3", "pk4", "pk5"}; //works fine
Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; //Works fine

2 个答案:

答案 0 :(得分:2)

java中基本类型的类型int,其父类(称为原始包装类)为Integer。虽然这两者基本上代表相同的数据,但它们不能直接从分配中直接翻译。 E.g。

int foo = 56;
Integer bar = foo;

将抛出编译错误(当且仅当您的源编译级别已设置为< = 1.4,但稍后再继续)。

在它们之间进行转换的正确方法是:

int foo = 56;
Integer bar = new Integer(foo);

虽然这似乎不必要地复杂/冗长。因此,自JDK 1.5 / 5.0(11年前发布!)以来,Oracle / Sun Microsystems的优秀人员引入了autoboxing和拆箱的概念。前一代码将自动解释为编译器级别的后一代码,解决了将原始包装类型与原始类型等同的任何问题。

此概念也适用于使用{} 初始化的数组,而不是现有数组,例如:

int[] foo = new int[50];
Integer[] bar = foo;
无论您要编译的版本是什么,

总是会产生编译器错误。由于自动装箱仅适用于primitive -> primitive wrapper type而非primitive[] -> primitive wrapper type[]

在您的情况下,您的源合规性级别(通常由-source xx设置)似乎已设置为1.4或更低(或者您使用的是2002年的编译器,谁知道)。要解决此问题,请将源兼容性提高到等于或高于1.5,以启用自动装箱。

注意:在禁用自动装箱时(通过1.4或更低的源值),您的角色示例也应该失败(给定Characterchar的原始包装类型,您正在初始化的基本类型)。我的猜测是你使用的是非标准的,不符合标准的编译器,它只支持语言功能的子集,你试图在不同的源值下编译程序的不同部分。

答案 1 :(得分:0)

Integerint是Java中的两种不同数据类型。 Integer是一个提供Integer对象和静态方法的包装类,int是一种原始数据类型。

您的代码将编译,但如果您认为最好使用此代码:

int[] intArray = {1,2,3,4,5};
相关问题