两个字符串应该相等?

nav*_*dra 1 java string

String s1 = "learn";
String s1 = s1+"Java";
Run Code Online (Sandbox Code Playgroud)

现在s1指向"learnJava"字符串对吗?

String s2 = "learnJava";
Run Code Online (Sandbox Code Playgroud)

if(s1 == s2)是假的.为什么?

s2应该指向与"learnJava"StringConstantPool(s1)中已存在的相同.

Jon*_*eet 11

s2应指向与StringConstantPool中已存在的"learnJava"相同的"learnJava".

不 - 除非你打电话,否则字符串池仅用于常量字符串intern.

所以字符串池包含"learn","Java"并且"learnJava"......但是s1指的是不在字符串池中的字符串,因为连接是在执行时执行的.

如果你有一个编译时常量表达式,它将是不同的:

String s1 = "learn" + "Java"; // Constant expression
String s2 = "learnJava";
System.out.println(s1 == s2); // true, guaranteed
Run Code Online (Sandbox Code Playgroud)

或者,如果您想保持执行时间连接:

String s1 = "learn";
s1 += "Java";
s1 = s1.intern();
String s2 = "learnJava";
System.out.println(s1 == s2); // true
Run Code Online (Sandbox Code Playgroud)

一般来说,只是不要将字符串与==...... 进行比较,这几乎总是一个坏主意.