我正在从文件中读取一些数据。
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作为字符串?
答案 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