这是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认证所必需的。
干杯
答案 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.Array
,getLength(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)
int[] intArray = new int[2];
Object ob = intArray;
((int[])ob)[0]= 5;
System.out.println(intArray[0]);
输出为“5”。