簡體   English   中英

賦值運算符String對象

[英]assignment operator String object

我是JAVA編程新手。 我已經在書中讀過了

String a="Hello";
String b="Hello";
System.out.println(a==b);

這應該返回false,因為a和b引用String對象的不同實例。

Bcoz賦值運算符比較對象的實例,但是我還是得到了true
我正在使用Eclipse IDE。

書中的例子是這樣的:

String s = "s";
String sToo = "s";
System.out.println(a == b);
System.out.println(s == sToo);

這段代碼為s == sToo打印“ false”。 這是因為s和sToo是對String對象的不同實例的引用。 因此,即使它們具有相同的值,但在相等運算符的眼中它們也不相等。 同樣,s ==“ s”打印為false,因為字符串文字產生了​​String類的另一個實例。

書名:絕對初學者的JAVA 7

這是一種稱為字符串池的優化,其中可以設置編譯時常量字符串(又名在編譯時相同),以使它們確實是內存中的同一對象(為最常用的對象類型之一節省空間) 。 或用文檔的話說;

“所有文字字符串和字符串值常量表達式均已插入。”

請注意,這僅適用於在編譯時定義的字符串,因此以下內容確實會打印為false。

String a="Hello";
String b=new String("Hello");
System.out.println(a==b); //prints false because a new string was forced

要么

String a="Hello";
String b1="He";
String b2="llo";
String b=b1+b2;

System.out.println(a==b); //prints false because b wasn't know to be "Hello" at compile time so could not use string pooling

注意:可以通過使b1和b2為最終值,使第二個代碼段打印為真,從而允許在編譯時知道b1 + b2。 總而言之,您需要非常小心,並在相當多的情況下對待string == string ,在絕大多數情況下,您需要不存在此行為的string.equals(string)。

暫無
暫無

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

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