是否有可能使用==操作符來比較Java字符串?
爲什麼我經常看到用equals()方法代替?
是因爲當與字面字符串(如「你好」)比較使用==並不意味着調用equals()?
是否有可能使用==操作符來比較Java字符串?
爲什麼我經常看到用equals()方法代替?
是因爲當與字面字符串(如「你好」)比較使用==並不意味着調用equals()?
沒有定製運營商在java中過載。 [所以不能過載它來調用的equals()]
了equals()確保你檢查2個對象是相同的,而==檢查這是否是完全相同的對象。 [所以不,使用==不會調用equals()]。
有沒有**自定義**運算符重載。 Java語言重載了一些運算符('+'可以表示數字加法或字符串連接,'|'可以表示按位OR或邏輯非快捷鍵OR)。 –
@Joachim:同意,我認爲OP對自定義運算符重載感興趣,所以我沒有明確提及它。感謝您的評論。我編輯了我的答案。 – amit
==
檢查兩個對象是否引用同一個對象實例,而equals()
檢查這兩個對象是否實際上等價,即使它們不是相同的實例。
不,這是不可能的,因爲==你比較對象引用,而不是字符串(您需要使用等於)的內容。
要在@ Amit的答案擴大,操作符==只應在值類型(int,double等)的字符串是一個引用類型,因此,應與.equals()方法相比,使用。在引用類型檢查在Java引用平等使用==操作符(意思是兩個對象引用指向同一個內存位置。)
String是一個class.So如果您嘗試比較其對象的字符串抱着你不能使用==,因爲它是尋找一個object.For比較,你必須使用對象的內容的字符串值等於
==操作符比較字符串對象引用,而String.equals方法檢查用於對象引用+對象值。而且,String.equals方法inturn在其實現中使用==運算符。
從我所知道的'=='運算符是用來檢查對象是否相同。
可能的比較字符串可能具有相同的值(字符等),但事實上是兩個完全不同的對象,因此會導致比較錯誤。
在Java中,您不能重載運算符。 ==
運算符確保身份相等。另一方面,equals(...)
方法可以被覆蓋以進行類型特定的比較。
這裏的代碼片段演示:
String a = "abcdef";
String b = a;
String c = new String(a);
println(a == b); // true
println(a.equals(b)); // true
println(a == c); // false
println(a.equals(c)); // true
的一個複雜因素是你需要關心空,也equals(...)
。所以,正確的空安全的成語是:
(a == null ? b == null : a.equals(b))
這是一個循環,你不必通過跳躍中說C#
正如阿米特已經說過,==檢查是相同的對象,而equals()
檢查相同的內容(好的,基本實現等於==,但String
覆蓋此內容)。
注:
"Hello" == "Hello" //most probably would be true
"Hello".equals("Hello") //will be true
String s1, s2; //initialize with something different than a literal, e.g. loading from a file, both should contain the same string
s1 == s2 //most probably will NOT be true
s1.equals(s2) //will be true, if both contain the same string, e.g. "Hello"
除此之外,同樣適用於原語的對象封裝,例如真
Long l1 = 1L;
Long l2 = 1L;
l1 == l2 //will most likely be true for small numbers, since those literals map to cached instances
l1.equals(l2) //will be true
new Long(1) == new Long(1) //will NOT be true
new Long(1).equals(new Long(1)) //will be true
==
如果內存地址在兩側都相等,除基本類型外,則返回true。
等於應該用在不是原語的所有東西上。主要部分的類。
==運算符檢查對象的位模式而不是這些對象的內容,但等於函數比較對象的內容。
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1 == str2);將返回false,因爲str1和str2是用「new」創建的不同對象。 System.out.println(str1.equals(str2))將返回true,因爲equals()會檢查對象的內容。
http://stackoverflow.com/questions/767372/java-string-equals-versus – Johan
只要注意,有時==可能成功爲兩個不同的字符串變量,這是因爲實習方法導致他們都參考相同的實際對象的內存。 – Steven
如果你的谷歌「java字符串比較」,你會發現任何數量的明確解釋,包括在這個網站上的一些。 – NPE