我想比较scala中的两个字符串。例如,如何比较scala中的两个字符串?
我的字符串是:
scala java
scala java c++
scala c++
我想比较字符串
“阶C++” 每串
结果应该是,
scala c++ = scala java // false
scala c++ = scala java c++ // false
scala c++ = scala c++ // true
我想比较scala中的两个字符串。例如,如何比较scala中的两个字符串?
我的字符串是:
scala java
scala java c++
scala c++
我想比较字符串
“阶C++” 每串
结果应该是,
scala c++ = scala java // false
scala c++ = scala java c++ // false
scala c++ = scala c++ // true
在斯卡拉你可以使用==
for equality
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类中定义。由于这些方法首先检查空值,然后在第一个对象上调用equals方法来查看这两个对象是否相等,您不必进行特殊的空检查;
"test" == null
res0: Boolean = false
见Scala getting started guide和strings
从 “An Overview of the Scala Programming Language Second Edition”;
“的平等操作值之间==被设计为 透明相对于该类型的表示。对于值 类型,它是天然的(数值或布尔)相等。为了参考 类型==被视为的别名等于从 java.lang.Object中方法。该方法最初定义为参考 平等,但是指在子类中实现01被覆盖这些小类的平等自然概念。例如,值类型的盒装版本将实现等于方法 比较盒装值。相比之下,在Java中,==始终意味着 引用类型上的引用相等。虽然这是更有效的实施,但它也引入了严重的一致性问题 ,因为相同值的盒装版本可能不再等于关于==的 。有些情况下需要参考平等而不是用户自定义的平等。一个例子是散列问题,其中最大的问题是 。对于这些情况,类AnyRef定义了一个附加当量 方法,该方法不能被重写,并且被实现为参照 平等(即,它的行为就像 ==在Java中作为参考类型)。”
这个单一的改进带走了这么多'java'痛苦! – dmitry 2015-08-04 09:40:40
与Java,Scala的使用完全不可改变的字符串。 随着奥柳斯指出,
字符串在Java和Scala不变。Scala使用Java字符串,但 用StringOps或WrappedString包装它们。 Java中的“final”是 ,与Scala中的“val”基本相同。在Scala中,==方法是在AnyRef中定义的 。
所以,在斯卡拉你只需使用==
运算符来比较两个字符串。
例如你有串STRING1和字符串2你可以做
string1 == string2 //=> true/false
什么你可能要记住的是,如果该字符串值不存储在val
,你只是想比较二,你应该使用双引号来封装字符串值。
例如:
"hello" == "hello" //=> true
"hello" == "bye" //=> false
什么将是返回true的例子吗? – 2014-10-10 10:46:36
为什么最后的测试应该返回'false'? – 2014-10-10 11:07:03