0

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

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

4 回答 4

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);
于 2012-10-16T10:15:00.900 回答
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);
    }
}
}
于 2012-10-16T10:18:08.400 回答
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,因为它会引入性能开销

于 2012-10-16T14:43:11.923 回答
1

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

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

}
于 2012-10-16T10:17:34.240 回答