簡體   English   中英

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不是編譯時常量表達式,因為s1s2不是最終的(盡管它們被分配了編譯時常量值)。

因此,該值是在運行時計算的:盡管值相同,但結果與常量池中的實例不同。

這里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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM