Java Tutorial,这个程序包含一个bug,但我找不到它

时间:2012-10-16 10:14:02

标签: java

此程序符合但无法成功运行,我无法找到错误。

public class Q1 {
    public static void main(String[] args) {
        StringBuffer[]stringBuffers = new StringBuffer[10];

        for(int i =0; i< stringBuffers.length;i++){
            stringBuffers[i].append("StringBuffer at index " + i);
        }
    }
}

4 个答案:

答案 0 :(得分:6)

您没有初始化stringbuffers

你应该有像

这样的东西
for(int i =0; i< stringBuffers.length;i++){
   stringBuffers[i] = new StringBuffer();

for(int i =0; i< stringBuffers.length;i++){
   stringBuffers[i] = new StringBuffer("StringBuffer at index " + i);

答案 1 :(得分:2)

你需要初始化StringBuffer:

public class Q1 {
public static void main(String[] args) {
    StringBuffer[]stringBuffers = new StringBuffer[10];

    for(int i =0; i< stringBuffers.length;i++){
        stringBuffers[i]= new StringBuffer();
        stringBuffers[i].append("StringBuffer at index " + i);
    }
}
}

答案 2 :(得分:1)

您需要使用所需的字符串初始化数组中的StringBuffer个对象: -

for(int i =0; i< stringBuffers.length;i++){
    stringBuffers[i] = new StringBuffer("StringBuffer at index " + i);

}

答案 3 :(得分:1)

声明中:

StringBuffer[]stringBuffers = new StringBuffer[10];

你刚刚创建了一个包含10个元素的数组。但是你没有在其中放入任何元素。此数组中的每个元素仍为空,默认情况下包含null

所以当你打电话时

stringBuffers[i].append("StringBuffer at index " + i);

此处stringBuffers[i]仍然未初始化,指向null

所以它给了java.lang.NullPointerException.

如其他答案中所述,如果你喜欢这样:

for(int i =0; i< stringBuffers.length;i++){
   stringBuffers[i] = new StringBuffer();

这将使用引用将stringBuffer数组的每个元素初始化为StringBuffer对象。所以stringBuffer [i]现在不为空。


顺便说一下你应该使用StringBuilder。 StringBuffer和StringBuilder都提供可变字符串。仅当您的应用程序在多线程环境中运行时才使用StringBuffer becoz它会引入性能开销