String s="";
while ((strLine = br.readLine()) != null) {
s=s.concat(strLine);
当我使用这段代码时,我从文件中得到了我期望的字符串.. 但是,如果我使用
String s = null;
我得到的是null
作为s字符串的结果。有人能解释一下这个的原因吗?
答案 0 :(得分:9)
首先,我怀疑不你的代码 - 或者它会抛出NullPointerException
。我怀疑你实际得到了:
s = s + strLine;
之后,它非常简单 - 将任何字符串与null
字符串引用相连接将为您提供null
:
String x = null;
String y = x + "a";
System.out.println(y); // nulla
来自section 15.18.1 of the JLS(字符串连接):
如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换(第5.1.11节)以在运行时生成字符串。
然后从section 5.1.11:
如果引用为null,则将其转换为字符串“null”(四个ASCII字符n,u,l,l)。
请注意,您的代码目前效率极低 - 您应该使用StringBuilder
。