使用+运算符的字符串常量池

use*_*781 2 java

    public class Strings 
    { 
      public static void main(String ads[])
      { 
           String a =    "meow"; 
           String ab = a + "deal"; 
           String abc= "meowdeal"; 
           System.out.println  (ab==abc); 
      } 
    } 
Run Code Online (Sandbox Code Playgroud)

为什么输出false?在这个程序ab是在string文字中创建然后abc创建但是为什么ababc不是在字符串常量池中引用相同的内存,因为在创建abc它之前在字符串常量池中搜索String meowdeal.

ant*_*oft 5

Java只汇集它在编译时知道的字符串; 字符串常量和常量字符串表达式.a是一个局部变量,所以+"deal"是一个字符串表达式,直到运行时才会被计算(即使你看它也可以看到它应该是常量).Java编译器不知道它是一个常量表达式,并且不会将它放在池中.它在运行时执行字符串连接,从而产生与池中任何对象不同的对象.