lixiaolin123
V2EX  ›  问与答

关于 String#intern

  •  
  •   lixiaolin123 · Aug 28, 2024 · 1544 views
    This topic created in 641 days ago, the information mentioned may be changed or developed.

    public Class Example{ public static void main(String[] args) { String s = new String("1"); s.intern(); String s2 = "1"; System.out.println(s == s2);

    String s3 = new String("1") + new String("1");
    s3.intern();
    String s4 = "11";
    System.out.println(s3 == s4);
    

    } }

    这段代码的我机器上输出结果是 false false.但我看到原文 https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html 的结果是 false true.所以到底结果应该是什么?

    Supplement 1  ·  Aug 28, 2024

    重新排版修改:

    public class Example{   
      public static void main(String[] args) {
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s == s2);
    
        String s3 = new String("1") + new String("1");
        s3.intern();
        String s4 = "11";
        System.out.println(s3 == s4);
     }
    }
    
    Supplement 2  ·  Aug 29, 2024

    代码1:

    public class Main {
      public static void main(String[] args) {
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s == s2);
    
        String s3 = new String("1") + new String("1");
        s3.intern();
        String s4 = "11";
        System.out.println(s3 == s4);
      }
    }
    //false false
    

    代码2:

    public class Main {
      public static void main(String[] args) {
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s == s2);
    
        String s3 = new String("呼喊哈虎") + new String("呼喊护花");
        s3.intern();
        String s4 = "呼喊哈虎呼喊护花";
        System.out.println(s3 == s4);
      }
    }
    //false true
    
    2 replies    2024-08-29 13:36:17 +08:00
    itart
        1
    itart  
       Aug 28, 2024
    s = s.intern();
    lixiaolin123
        2
    lixiaolin123  
    OP
       Aug 29, 2024
    @newte88 感谢回答。

    我找到原因了。 一开始得到结果 false false 是因为我用的是公共在线 JVM https://www.bejson.com/runcode/java/

    第 2 条附言,比较一下代码 1 和代码 2 ,你应该也就知道原因了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2788 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:29 · PVG 15:29 · LAX 00:29 · JFK 03:29
    ♥ Do have faith in what you're doing.