Axe Axe - 3 months ago 8
Groovy Question

Why two equivalent property are not equal in Groovy

Please have a look at this simple code:

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

assert 'a'.a == 'a'.a



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



Why the result is FALSE?

I am working at Groovy 2.4.7 on Windows 7 SP1

Answer

LeftShift on a String in Groovy generates a StringBuffer (docs)

So 'a'.a == 'a'.a is trying to do equals on two StringBuffers.

You can't do that with StringBuffer as the equals method isn't overloaded, and just checks if they are the same instance

Comments