【问题标题】:How to compare two strings in scala?如何比较scala中的两个字符串?
【发布时间】:2014-12-05 12:12:00
【问题描述】:

我想在 scala 中比较两个字符串。例如,

我的字符串是:

scala java
scala java c++
scala c++

我要比较字符串

" scala c++" 与每个字符串

结果应该是,

scala c++ = scala java   // false
scala c++ = scala java c++  // false
scala c++ = scala c++   // true

【问题讨论】:

  • 返回 true 的例子是什么?
  • 为什么最后一个测试应该返回false

标签: string scala equality


【解决方案1】:

在 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

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

"test" == null
res0: Boolean = false

查看Scala getting started guidestrings

来自“An Overview of the Scala Programming Language Second Edition”;

“值之间的相等运算==被设计为 相对于类型的表示是透明的。为了价值 类型,它是自然的(数字或布尔)相等。以供参考 类型,== 被视为 equals 方法的别名 java.lang.Object。该方法最初被定义为参考 平等,但意味着在子类中被覆盖以实现 这些子类的自然平等概念。例如, 值类型的盒装版本将实现一个 equals 方法,该方法 比较装箱的值。相比之下,在 Java 中,== 总是意味着 引用类型上的引用相等。虽然这有点多 实施起来很有效,但它也引入了严重的连贯性问题 因为相等值的盒装版本可能不再等于 尊重==。有些情况需要引用相等而不是 用户定义的平等。一个例子是 hash-consing,其中效率是 最重要的。对于这些情况,AnyRef 类定义了一个额外的 eq 方法,不能被覆盖,作为参考实现 平等(即,它表现得像 == 在 Java 中用于引用类型)。”

【讨论】:

  • 这个单一的改进带走了这么多java 痛苦!
【解决方案2】:

要添加到相等比较,您可以使用!= 表示不相等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2022-09-30
    • 2019-01-14
    • 2021-06-18
    • 2021-11-20
    • 2012-02-08
    • 2015-11-01
    相关资源
    最近更新 更多