字符串串联在java中给出了错误的输出

字符串串联在java中给出了错误的输出,java,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.print

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

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作为字符串时,不会将任何内存转换为内容对象?

替换

String content = null;


因为在Java中,空字符串对象可以连接到其他字符串。空字符串对象将打印“空”

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

String content = null;
这显然是由您指定的。稍后,您将连接
null
+hello,这就是为什么它将nullhello作为输出

所以,保持
String content=“”
而不是
String content=null

请参见:

如果引用为
null
它将转换为字符串“null”(四个 ASCII字符n、u、l、l)。否则,执行转换 就像通过调用被引用对象的toString方法一样 没有争论;但是如果调用toString方法的结果 为null,则使用字符串“null”

这就是为什么要将
“null”
连接为字符串,您可能希望将变量初始化为空字符串,即


强烈建议使用而不是
+
,在性能方面,您会感觉到不同。

因为
String content=null.String content=“”;请参见查看
StringBuilder
。通过构造
String
s并连接字符串来构建字符串会导致大量内存浪费,因为创建对象只是为了通过自动垃圾收集来收集它们。但是String类toString()返回相同的字符串对象。在字符串类的声明中,有私有的最终字符值[];还有int hash。那么它如何以及为什么转换为“null”字符串呢?当用户指定时,为什么它分配4字节来存储“null”我将稍后分配内存,直到字符串对象不会指向任何内存位置我知道我需要使用“”,但我有一个问题,为什么它分配内存?它会转换为“null”,因为这就是语言的定义方式。另外,将变量声明为
null
引用并不意味着没有分配内存。
String content = null;