如果我們使用String類的toUpperCase()
方法,它是否將對象放在堆中而不是在字符串池中創建它。下面是代碼,當我運行時,我可以推斷新創建的字符串對象不在字符串池中。string.toUppercase()在堆或字符串池中創建一個新對象
public class Question {
public static void main(String[] args) {
String s1="abc";
System.out.println(s1.toUpperCase()==s1.toUpperCase());
}
}
輸出上述代碼返回假的。 我知道「==」和equals()的區別,但在這個問題中,我想知道爲什麼兩個創建的字符串不相等。唯一的解釋可能是它們不是在字符串池中創建的,而是兩個不同的對象。
可能的重複[如何比較Java中的字符串?](https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – nullpointer
當您創建字符串文字去字符串池。對於其他任何事情,都會創建一個新對象 – Pramod
'=='不比較2個字符串,它比較2個對象包含引用這2個字符串,所以2個對象是不同的。字符串對象是不可變的,所以我認爲它會去字符串池。閱讀更多關於'不可變vs可變對象','字符串池vs堆' –