字符串操作问题

时间:2009-11-11 14:33:43

标签: java

当我看到这段代码时,我对java String的理解出错了。 我不确定这是怎么回事。 任何人都可以解释为什么会这样吗?。

public class NewClass {
    public static void main(String[] args) {
        String str=null;

        System.out.println(str+"Added");
    }
}

输出:nullAdded

5 个答案:

答案 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对象上调用任何操作。我知道有点奇怪。但事实就是如此。

link: concat null and String

答案 4 :(得分:-1)

字符串变量str被赋予空值。

当你打印它时,String#toString()将其转换为字符串'null',并附加字符串“Added”。结果是

nullAdded