[英]Strange Groovy / Java String comparison behavior
考慮以下腳本:
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 一起運行時,它具有以下 output:
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() function 應該返回:
將此字符串與指定的 object 進行比較。 當且僅當參數不是 null 並且是表示與此 object 相同的字符序列的字符串 object 時,結果才為真。
為什么 equals() 不返回上面記錄和演示的值? 奇怪的是,compareTo() 返回 0!
該問題在Groovy GString 頁面上得到解答。 我需要在 GString 上調用 toString()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.