[英]String intern, String concatenation and String constant pool example in java
[英]Concatenation of two string in String constant pool in java
由於兩個字符串的連接將在字符串常量池中生成新字符串 object 那么為什么下面的代碼評估為否。
public class Main {
public static void main(String[] args) {
String s = "abcd";
String s1 = "ab";
String s2 = "cd";
s1 = s1+s2;
if(s1==s)
System.out.println("YES");
else
System.out.println("No");
}
}
s1+s2
不是編譯時常量表達式,因為s1
和s2
不是最終的(盡管它們被分配了編譯時常量值)。
因此,該值是在運行時計算的:盡管值相同,但結果與常量池中的實例不同。
這里s
已經編譯了時間分配值並且s1
在運行時兩者都不是同一個實例字符串池。 在這種情況下,使用 equals 方法檢查字符串中的等號,例如: s1.equals(s)
。
如果在運行時計算兩個值,這將起作用。
String s1 = "ab";
String s2 = "cd";
String s3;
s1 = s1+s2;
s3 = s1;
if(s1==s3)
System.out.println("YES");
else
System.out.println("No");
}
它給你 output YES。
如果在編譯時分配了兩個值,那么它將起作用。
String s = "abcd";
String s1 = "abcd";
if(s1==s)
System.out.println("YES");
else
System.out.println("No");
}
此代碼還為您提供 output YES
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.