-1

是的,我已经阅读了 Stackoverflow 上关于 NPE 的优秀解释,并且我理解了它们的意思。然而,我在该教科书的一个示例练习中发现(我想我发现)了一个关于这个 NPE 的问题,事实上,我很久以前在哈佛使用过。

它是关于引用变量 String line = null; 正如解释所说,没有对象被创建,而它后来被尝试用作这样的对象(所以我认为),更准确地说,当 line = inputStream.nextLine(); 时尝试被访问。这是代码,问题是如何解决这个问题。我曾尝试实例化一个对象,但......没有奏效。

package test;

import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.FileOutputStream;

public class Test
{
    public static void main(String[] args) {
        Scanner inputStream = null;
        PrintWriter outputStream = null;
        try {
            inputStream = new Scanner(new FileInputStream("original.txt"));
            outputStream = new PrintWriter(
            new FileOutputStream("numbered.txt"));
        } catch (FileNotFoundException e) {
            System.out.println("Problem opening files.");
            System.exit(0);
        }
        String line = null;
        int count = 0;
        while (inputStream.hasNextLine()) {
            line = inputStream.nextLine();
            count++;
            outputStream.println(count + " " + line.toString());
        }
        inputStream.close();
        outputStream.close();
    }
}

是的,我试图运行它。我将代码复制并粘贴到 Netbeans 7.3 上新创建的项目中

4

2 回答 2

4

line = inputStream.nextLine( );不尝试访问任何对象line:它为变量赋值line。因此,它不需要 line 是 not null

于 2013-03-25T20:19:43.320 回答
4
line = inputStream.nextLine( )

为 赋值line。它不会尝试读取 的当前值line,特别是通过尝试调用它的方法,所以我没有看到这里发生 NPE。line在这一点上很好null,因为它的值被赋值覆盖了。

您应该尝试通过实际运行此代码来证明您的怀疑!

于 2013-03-25T20:19:48.730 回答