当我看到这段代码时,我对java String的理解出错了。 我不确定这是怎么回事。 任何人都可以解释为什么会这样吗?。
public class NewClass {
public static void main(String[] args) {
String str=null;
System.out.println(str+"Added");
}
}
输出:nullAdded
答案 0 :(得分:11)
字符串连接将空引用视为Java中的“null”。来自StringBuilder.Append(String)
的{{3}}:
String参数的字符 按顺序附加,增加 该序列的长度由长度决定 这个论点。如果str为null,那么 四个字符“null”是 追加。
基本上您的代码类似于:
public class NewClass {
public static void main(String[] args) {
String str=null;
System.out.println(new StringBuilder().append(str)
.append("Added")
.toString());
}
}
这会让它更清楚吗?
答案 1 :(得分:2)
当您使用+
运算符时,会通过String.valueOf
方法将两个操作数转换为字符串(如果需要)。这将返回空引用的四字符字符串“null”,而不是实际的空引用。
因此null + "Added"
等于"null" + "Added"
,因此"nullAdded"
。
答案 2 :(得分:0)
您可能想要做的是使用空字符串初始化字符串:
String str = "";
答案 3 :(得分:0)
当将字符串转换为null对象的字符串连接到字符串null时,Java将始终/。通过String.valueOf。
Java知道它正在连接成一个字符串,所以即使null位于表达式的开头(而不是结尾),它仍会将其转换为null。
您没有得到nullpointerException,因为没有在null对象上调用任何操作。我知道有点奇怪。但事实就是如此。
答案 4 :(得分:-1)
字符串变量str被赋予空值。
当你打印它时,String#toString()将其转换为字符串'null',并附加字符串“Added”。结果是
nullAdded