3

这是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 认证所必需的。干杯

4

5 回答 5

11

您正在尝试投射的价值ob[0]而不是ob自身。您需要ob先将其转换为int[]然后在 index 上使用它[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;
}
于 2012-11-11T14:57:28.643 回答
4

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

于 2012-11-11T15:00:11.900 回答
1

要创建一个数组:

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

直接初始化:

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

我真的不明白你想要做什么,但你可以在需要时施放吗?

于 2012-11-11T14:59:05.930 回答
1
(int[])ob[0] = 5;

实际上没有必要。

ob[0] = 5将编译为:

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

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

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

诠释 x = 5; 字符串 valAsString = x.toString();

在Java中,您必须将 x 包装在 anInteger中才能做到这一点。

于 2012-11-11T15:05:52.897 回答
0

@rohit-jain 已经为您提供了解决方案...请注意,您没有像他告诉您的那样使用括号。

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

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

输出将是“5”。

于 2012-11-11T15:22:22.983 回答