字符串串联在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;