[英]Demonstrating string comparison with Java
我想用Java中的幾行代碼來演示,比較兩個字符串( String
),你必須使用equals()
而不是operator ==
。
這是我嘗試過的東西:
public static void main(String Args[]) {
String s1 = "Hello";
String s2 = "Hello";
if (s1 == s2)
System.out.println("same strings");
else
System.out.println("different strings");
}
我期待這個輸出: different strings
,因為測試s1 == s2
我實際上是在比較兩個引用(即地址)而不是objet的內容。
但實際上我得到了這個輸出: same strings
!
瀏覽互聯網我發現一些Java實現將優化上面的代碼,以便s1
和s2
實際上將引用相同的字符串。
那么,在比較Java中的字符串(或對象)時,如何使用==
運算符來演示問題?
編譯器會根據您的情況進行一些優化,以便s1
和s2
實際上是同一個對象。 你可以通過使用來解決這個問題
String s1 = new String( "Hello" );
String s2 = new String( "Hello" );
然后,您有兩個具有相同文本內容的不同對象。
那么,在比較Java中的字符串(或對象)時,如何使用==運算符來演示問題?
這是一種方式:
String s = "ab";
String t = new String("ab");
System.out.println(s == t); // false
在比較原始包裝器和使用自動裝箱時也要小心:Integer(和Long)例如緩存(並重新使用!)值-128..127。 所以:
Integer s = -128;
Integer t = -128;
System.out.println(s == t);
將打印為true
,同時:
Integer s = -129;
Integer t = -129;
System.out.println(s == t);
打印false
!
JAVA在堆空間中維護一個字符串池,如果可能的話,它會嘗試對相同的值進行多次引用。
你寫過:
String s1 = new String ("Hello");
String s2 = new String ("Hello");
它會給你輸出:“不同的字符串”。“new”關鍵字創建一個新的對象引用,而不給新的將首先檢查字符串池是否存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.