-1

PFB 我试图理解的一段代码。

public static void main(String[] args) {

    String s1 = "dexter7";
    String s2 = "dexter" + "7";

    System.out.println(s1==s2); //line 1 - Output is true

    String s3 = "dexter" + s1.length();

    System.out.println(s1==s3); //line 2 - Output is false

}

根据字符串常量池的概念,如果常量池中存在一个String值,除非图中有“new”关键字,否则它将被重用而不是创建一个新的String。

那么考虑到上面代码段中标记的第 1 行和第 2 行的输出,为什么上面代码段中的这种行为会发生变化。

任何人都可以帮助我理解这一点。

谢谢。

4

1 回答 1

1

s1.length()不是在编译时而是在运行时评估,所以

String s3 = "dexter" + s1.length();

将被编译成

String s3 = new StringBuilder("dexter").append(s1.length()).toString();

并将在内部toString使用new String(...)创建s3,因此它不会来自字符串池。


另一方面

String s2 = "dexter" + "7";

由编译器连接并编译成

String s2 = "dexter7";

s2与 .相同的字符串文字也是如此s1

于 2013-10-18T18:13:19.017 回答