如何比较scala中的两个字符串?

Ros*_*y b 22 string scala equality

我想比较scala中的两个字符串.例如,

我的字符串是:

scala java
scala java c++
scala c++
Run Code Online (Sandbox Code Playgroud)

我想比较字符串

每个字符串都有" scala c ++ "

结果应该是,

scala c++ = scala java   // false
scala c++ = scala java c++  // false
scala c++ = scala c++   // true
Run Code Online (Sandbox Code Playgroud)

olu*_*ies 35

在Scala中,您可以使用==相等性

scala> "scala c++" == "scala java"
res0: Boolean = false
scala> "scala c++" == "scala java c++"
res1: Boolean = false
scala> "scala c++" == "scala c++"
res2: Boolean = true
Run Code Online (Sandbox Code Playgroud)

==方法在AnyRef类中定义.由于方法首先检查空值,然后在第一个对象上调用equals方法以查看两个对象是否相等,您不必进行特殊的空值检查;

"test" == null
res0: Boolean = false
Run Code Online (Sandbox Code Playgroud)

请参阅Scala入门指南字符串

摘自" Scala编程语言第二版概述 ";

" 值之间的相等操作==被设计为对于类型的表示是透明的.对于值类型,它是自然的(数字或布尔)相等.对于引用类型,==被视为equals方法的别名来自 java.lang.Object.该方法最初被定义为引用相等,但是要在子类中重写以实现这些子类的自然相等概念.例如,值类型的盒装版本将实现equals方法,相比之下,在Java中,==始终意味着引用类型的引用相等.虽然这实现起来更有效,但它也引入了严重的连贯性问题,因为相等值的盒装版本可能不再相等尊重==.有些情况需要引用相等而不是用户定义的相等.例如hash-consing,eciency是最重要的.对于这些情况,类AnyRef定义了另外的eq me 的ThOD,这不能被重写,并且被实现为引用相等(即,它的行为就像 ==在Java中引用类型)".

  • 这种单一的改进消除了太多的Java痛苦! (2认同)