【问题标题】:Strange Groovy / Java String comparison behavior奇怪的 Groovy / Java 字符串比较行为
【发布时间】:2011-09-13 16:05:00
【问题描述】:

考虑以下脚本:

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 对象时,结果才为真。

为什么 equals() 不返回上面记录和演示的值?奇怪的是,compareTo() 返回 0!

【问题讨论】:

  • b 的类型是什么?也许是StringBuffer 或什么的?

标签: java groovy


【解决方案1】:

问题已在Groovy GString page 上得到解答。我需要在 GString 上调用 toString()。

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 2011-09-18
    • 2021-09-07
    • 2011-04-07
    • 1970-01-01
    • 2012-05-12
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多