簡體   English   中英

演示與Java的字符串比較

[英]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實現將優化上面的代碼,以便s1s2實際上引用相同的字符串。

那么,在比較Java中的字符串(或對象)時,如何使用==運算符來演示問題?

編譯器會根據您的情況進行一些優化,以便s1s2實際上是同一個對象。 你可以通過使用來解決這個問題

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.

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