簡體   English   中英

為什么==返回true?

[英]Why == returns true?

為什么這個條件返回true,因為我們知道==如果兩個變量都具有相同的引用,則返回true,但是這里的引用不相同,但仍在循環中輸入並打印Hello World。

String var1="hi";
String var2="hi";

if(var1==var2){
    System.out.println("Hello World");
}

因為Java有一個唯一的受約束實例實例池,並且String文字存儲在該池中。 這意味着第一個“ hi”字符串文字與第二個“ hi”文字完全相同。

當將字符串文字分配給變量時,由於字符串被緩存並且是不可變的,因此您很可能會獲得對同一對象的引用,因此這些字符串實際上具有相同的引用。

當您將String文字分配給String時,該文字將作為String實例存儲到內存中。 相同文字的進一步分配將指向相同的存儲位置。 因此,如果var1var2聲明為String類型,則var1 == var2將返回true ,因為它們指向同一個String實例"hi"

您已將var1和var2聲明為int而不是String。

我的編譯器拒絕編譯代碼,並說“不兼容的類型”。

您的編譯器可能會將字符串“ hi”強制轉換為某個數字,例如0,因為變量應該具有數字值。

請參閱jvm規范

使用String.intern方法,對字符串常量(或更一般地說,是常量表達式的值(第15.28節)的字符串)進行“ interned”,以便共享唯一的實例。

由於這個http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5的實現,這里的大多數答案已經為您指明了正確的方向,但是最好這樣做閱讀真理之源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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