字符串连接在java中输出错误

时间:2014-11-16 14:37:19

标签: java

我正在从文件中读取一些数据。

String content = null;

    File file=new File(str);
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    byte byt[] = new  byte[1024];
    try {
        while(fis.read(byt)!=-1)
        {
            content += new String(byt);
        }
        fis.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

文件包含一些文字Hello。 当我读完整文件时,它会给我字符串nullHello。为什么会这样。当我设置content = ""时,它给了我正确的字符串。 在第一种情况下,jvm在内联对象时不会有任何内存,而是在连接它如何使用null作为字符串?

4 个答案:

答案 0 :(得分:2)

请参阅JLS - 15.18.1 String Concatenation Operator +

  

如果引用为null则转换为字符串" null" (四   ASCII字符n,u,l,l)。否则,执行转换   好像是通过调用引用对象的toString方法   没有争论;但是如果调用toString方法的结果   为null,然后是字符串" null"而是用来代替。

这就是为什么你将"null"连接成一个String,你可能想要将变量初始化为 empty String,这是""

强烈建议您使用StringBuilder代替+,在性能方面,您会感受到不同。

答案 1 :(得分:0)

替换

String content = null;

String content = "";

答案 2 :(得分:0)

因为在Java中,null String对象可以连接到其他字符串。 null String对象将打印" null。"

一个空的String对象将打印一个0字符的字符串,这就是为什么当你从空字符串开始时,它将打印正确的字符串。

答案 3 :(得分:0)

String content = null;

这仅由您明确指定。后来你连接null +你好,这就是为什么它给出了nullhello作为输出。

因此,请保留String content="";而不是String content=null