初始化对象类型的数组

时间:2012-11-11 14:55:50

标签: java arrays object

这是Java中的代码片段:

Object ob = new int[2];

现在让我们说我要初始化数组。  这个 ob[0] = 5;将无法工作,因为ob属于Object类型。 施法也不起作用:

(int[])ob[0] = 5;

顺便说一句,(int[]ob)[0]= 5; 会导致语法错误。 那么,如何在没有硬编码的情况下在运行时分配值(例如Object ob = new int[]{1,2}? 这不是家庭作业,我试图了解Java。这是为了准备Java认证所必需的。 干杯

5 个答案:

答案 0 :(得分:11)

您正在尝试转换ob[0]而不是ob本身的值。您需要先将ob转换为int[],然后在索引[0]上使用它。

((int[])ob)[0] = 5;

注意: - 括号很重要。但是你为什么要这样做呢?


如果您不想对值进行硬编码,并希望在运行时使用它,那么您应该在评论中关注@HotLicks提到的内容。

Object ob = new int[5];

int[] tempArr = (int [])ob;

for (int i = 0; i < tempArr.length; i++) {
    tempArr[i] = i;
}

答案 1 :(得分:4)

您可以将对象转换为@Rohit Jain(+1)所述的数组类型,也可以使用java.util.ArraygetLength(obj)等方法的set(obj, elem, index)类,这样就可以了在运行时定义数组类型时使用动态创建的数组。

答案 2 :(得分:1)

创建数组:

int[] arrayName = new int[%size in int%];

直接初始化:

int[] arrayName = {1,2,3,4,5};

我真的不知道你想做什么,但你可以在你需要的时候施展?

答案 3 :(得分:1)

(int[])ob[0] = 5;

实际上没有必要。

ob[0] = 5将编译为:

ob[0] = new java.lang.Integer(5);

问题在于,因为ob是一个Object数组,而不是一个Integer或int数组,所以如果不进行强制转换,你将无法进行数学运算。

此功能称为autoboxing。它的创建是为了解决Java具有不能直接用作对象的原始数据类型这一事实。在.NET,Ruby和大多数其他“更纯粹”的面向对象平台中,您可以执行以下操作:

int x = 5; String valAsString = x.toString();

在Java中,你必须在Integer中包装x才能做到这一点。

答案 4 :(得分:0)

@ rohit-jain已经给你解决方案......请注意你没有像他告诉你的那样使用括号。

int[] intArray = new int[2];
Object ob = intArray;

((int[])ob)[0]= 5;
System.out.println(intArray[0]);

输出为“5”。