-2
String s="";
while ((strLine = br.readLine()) != null)   {
    s=s.concat(strLine);

当我使用这段代码时,我得到了我期望从文件中得到的字符串..但是如果我使用

String s = null;

我得到的是nulls 字符串的结果。谁能解释我这样做的原因?

4

1 回答 1

9

首先,我怀疑这不是你的代码——否则它会抛出一个NullPointerException. 我怀疑你实际上有:

s = s + strLine;

之后,它非常简单 - 将任何字符串与nullString 引用连接将为您提供null

String x = null;
String y = x + "a";
System.out.println(y); // nulla

JLS 的第 15.18.1 节(字符串连接):

如果只有一个操作数表达式是字符串类型,则对另一个操作数执行字符串转换(第 5.1.11 节)以在运行时生成字符串。

然后从第 5.1.11 节开始:

如果引用为 null,则将其转换为字符串“null”(四个 ASCII 字符 n、u、l、l)。

请注意,您的代码目前效率极低 - 您应该使用StringBuilder.

于 2013-07-19T15:44:38.793 回答