我正在阅读我正在处理的项目中的一些java代码,并且在其中出现了一些具有此效果的方法。
Object[] objs = null;
objs[0] = str1;
objs[1] = obj1;
for(String str: strArray)
{
objs[objs.length+1] = str;
}
我无法弄清楚这里发生了什么。我希望有人可以解释这段代码对我的影响,最好是在高级别和幕后低级别。
答案 0 :(得分:7)
那应该不会运行。 objs [0]会出错。
您确定要运行正确的文件版本吗?
答案 1 :(得分:6)
这无法用Java工作。我怀疑“这种效果”与实际代码略有不同,如果它似乎有效的话。一些问题:
NullPointerException
objs[objs.length+1]
没有扩展数组,这似乎是意图 - 数组在分配后是固定大小。objs[objs.length]
来扩展它们 - 如果这段代码有效,你就会结束所有其他元素都“缺失”答案 2 :(得分:1)
您的第一个问题是objs
是null
而不是作为数组分配。第一行应该是:
Object[] objs = new Object[2]; // array 2 elements long
接下来,“数组长度”是数组的总分配大小,而不是您插入的元素数。因此,在此示例中,objs.length
始终为2
。
因此你的循环也是错误的。
正确的代码是:
Object[] objs = new Object[ strArray.length ]; // array of the right size.
for( int k = 0 ; k < strArray.length ; k++ )
{
objs[k] = strArray[k];
}
答案 3 :(得分:0)
它不是独立编译,而是添加一些内容,例如
public class Test {
public static void main(String[] args) {
String[] strArray = new String[]{"a","b","c","d","e","f"};
Object obj1 = new Object();
String str1 = "test";
Object[] objs = null;
objs[0] = str1;
objs[1] = obj1;
for(String str: strArray)
{
objs[objs.length+1] = str;
}
}
}
它会,因为它是正确的Java然后
NullPointerException
)objs[0] = str1
答案 4 :(得分:0)
以下代码是您的代码,其中包含一些使其编译的修正程序会抛出NullPointerException,如预期的那样。
public class Crap
{
public static void main (String[] args)
{
Object[] objs = null;
objs[0] = "str1";
objs[1] = new Object ();
for(String str: new String [] { "str1", "str2" })
{
objs[objs.length+1] = str;
}
}
}
Exception in thread "main" java.lang.NullPointerException
at Crap.main(Crap.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
答案 5 :(得分:0)
@Jason Cohen
那些应该存储在objs数组中的str1和obj1成员呢?