为什么两个等价的 属性 在 Groovy 中不相等

Why two equivalent property are not equal in Groovy

请看一下这个简单的代码:

String.metaClass {
  getA = {delegate <<= delegate}
}

assert 'a'.a == 'a'.a
Result: Assertion failed: 
    assert 'a'.a == 'a'.a
               | |      |
               | false  aa
               aa

为什么结果是 FALSE

我在 Groovy 2.4.7 Windows 7 SP1

上工作

左移 Groovy 中的字符串生成 StringBuffer (docs)

所以 'a'.a == 'a'.a 试图在两个 StringBuffer 上做 equals。

你不能用 StringBuffer 这样做,因为 equals 方法没有重载,并且 just checks if they are the same instance