如何+内部使用JAVA中的字符串

时间:2015-10-15 06:11:57

标签: java string

我从博客中读到,当我们使用 + 运算符时,内部java使用StringBuilder来连接String。我只是检查它,发现了一些奇怪的输出。

public class StringDemo {

    public static void main(String[] args) {

        String a = "Hello World";
        String b = "Hello World";
        String c = "Hello";
        String d =  c + " World".intern();
        String e =  new StringBuilder().append(String.valueOf(c)).append(" World").toString().intern() ;
        String f =  new StringBuilder(String.valueOf(c)).append(" World").toString().intern();

        System.out.println(a == b);   // Line 1 Expected output true
        System.out.println(a == d);   // Line 2 Output is false
        System.out.println(a == e);   // Line 3 Output is true
        System.out.println(a == f);   // Line 4 Output is true

    }
}

所以我使用 + 运算符来连接两个字符串 c & “World”然后使用intern()方法在字符串 d 的池中移动String。

根据我的理解,java使用StringBuilder,所以现在我使用StringBuilder连接String并使用intern()方法用于Strings e f 。 因此,如果两个字符串的等效地址和地址必须相同,但第2行的输出与第4行和第4行不匹配。 5。

提前感谢您的宝贵意见。

1 个答案:

答案 0 :(得分:10)

  

+内部如何在JAVA中工作

这是我的帖子,请阅读Compiler version : How String concatenation works in java.

来到你的代码

System.out.println(a == d); 

那应该只是false

根据您的理解,您期待true。不,你的理解是错误的。

之间有明显的区别
    String d =  c + " World".intern();

并且

    String d =  (c + " World").intern();

在第一行只有"World"被拘禁而第二行被"Hello World"被拘禁

执行(c + " World").intern()后,您会看到输出true

相关问题