Update: In Scala 2.8, the below is no longer true. String.reverse
now returns a String
rather than a RichString
:
scala> "a".reverse == "a"
res0: Boolean = true
=========================================
In the Scala programming language, there is a class called
RichString
, that adds features to the underlying Java String
. In the current version of Scala (2.7.2.final), this leads to some odd behaviour:"Im a string" == "Im a string".reverse.reversereturns
false
, while"Im a string" == "Im a string".reverse.reverse.toStringreturns
true
!Just to make your head spin, the following code does indeed work as expected:
val str :String = "Im a string".reverse.reversewhile
println(str == "Im a string") // prints "true"
val str = "Im a string".reverse.reversedoes not.
println(str == "Im a string") // prints "false"
The explanation is that
String.reverse
returns a RichString
, and that ==
returns false
when comparing a String
and a RichString
, even though it is the "same" string (as in the example above).If I understand it correctly, this oddity will be fixed in future releases of Scala.
(And no, Scala's
==
is not the same as Java's ditto. It means "equal objects" rather than "refers to the same instance of an object".)Scala mailing list item here.