![](/img/trans.png)
[英]Why SingleColumnValueFilter do not returns true answer on < and > operator?
[英]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實例存儲到內存中。 相同文字的進一步分配將指向相同的存儲位置。 因此,如果var1
和var2
聲明為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.