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!
'b'的類型是什麼?也許它是一個'StringBuffer'或什麼的? – 2011-06-13 04:17:35