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)
一般来说,只是不要将字符串与==...... 进行比较,这几乎总是一个坏主意.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |