2011-06-13 46 views
7

請看下面的代碼:Groovy的怪/ Java的字符串比較行爲

def a = new HashSet() 
def str1 = "str1" 
def str2 = "str2" 
def b = "$str1-$str2" 
def c = "str1-str2" 
println "b: $b" 
println "c: $c" 
println "b.equals(c): " + (b.equals(c)) 
println "b == c: " + (b == c) 
println "b.compareTo(c): " + (b.compareTo(c)) 

a.add(b) 
println "a.contains(c): " + a.contains(c) 

時使用Groovy 1.8和JDK 1.6.0_14運行它具有以下的輸出:

b: str1-str2                            
c: str1-str2 
b.equals(c): false 
b == c: true 
b.compareTo(c): 0 
a.contains(c): false 

兩個字符串「B 「和」c「打印相同的字符序列,但b.equals(c)是錯誤的。根據JDK 1.6手冊,equals()函數應返回:

將此字符串與指定對象進行比較。當且僅當參數不爲null並且是表示與此對象相同字符序列的String對象時,結果爲true。

爲什麼equals()不返回上面記錄和演示的值?奇怪的是,compareTo()返回0!

+0

'b'的類型是什麼?也許它是一個'StringBuffer'或什麼的? – 2011-06-13 04:17:35

回答