我是scala/java的新手,我在解决这两个问题上遇到了麻烦.
通过阅读scala文档,我了解到ArrayBuffer是交互式的(追加,插入,前置等).
1)基本的实施差异是什么?
2)这两者之间是否存在性能差异?
谢谢.
在scaladoc中scala.Any,解释了运算符==(或方法==):
该表达式
x == that相当于if (x eq null) that eq null else x.equals(that)http://www.scala-lang.org/api/current/#scala.Any
对于子类的对象AnyRef,我可以很容易地理解它,我没有看到任何奇怪的东西.
然而,对于值AnyVal,(我的意思是Int,Double,Long,等,)上面的定义是有点棘手(1 eq null?如果我们不转变这并不编译1到java.lang.Integer中).此外,==和equals()不同的表现.
我举几个例子.
scala> 1 == 1 res0: Boolean = true scala> 1 == 1.0 res1: Boolean = true scala> 1 == 1.2 res2: Boolean = false scala> 2 == BigInt(2) res3: Boolean = true scala> 2.0 == …
为什么建议在Scala中使用==而不是.equals字符串比较?StackOverflow中有很多问题不建议在Java中使用引用等式进行字符串比较,但为什么建议在Scala中进行完全相反的操作呢?
val filesHere = (new java.io.File(".")).listFiles
val filesHere2 = (new java.io.File(".")).listFiles
Run Code Online (Sandbox Code Playgroud)
scala> filesHere == filesHere2
res0:Boolean = false
这非常直观.我宁愿期望filesHere和filesHere2相等.
这肯定是由于Java和Scala之间的语义不匹配,例如,关于数组或(文件)相等.显然,我在这里遗漏了一些东西!
正如您在下面看到的,在序列化和反序列化之后,您将获得据称不同的DateTime实例:
scala> import org.joda.time.DateTime
import org.joda.time.DateTime
scala> val a = new DateTime()
a: org.joda.time.DateTime = 2014-01-08T19:00:08.883+02:00
scala> val b = DateTime.parse(a.toString())
b: org.joda.time.DateTime = 2014-01-08T19:00:08.883+02:00
scala> a == b
res0: Boolean = false
Run Code Online (Sandbox Code Playgroud)
根据AbstractInstant的javadoc,equals"基于毫秒时刻,时间顺序和时区,将此对象与指定对象进行相等性比较." 所以这不应该发生吗?我错过了什么?
val a=new String("Hello")和之间有什么区别val a="Hello"
例:
val a="Hello"
val b="Hello"
a eq b
res:Boolean=True
Run Code Online (Sandbox Code Playgroud)
同理:
val a=new String("Hello")
val b=new string("Hello")
a eq b
res:Bolean=False
Run Code Online (Sandbox Code Playgroud) 我是斯卡拉的新手.请帮我理解下面的代码片段
null.==("goutam") // ---> return false
null.equals("goutam") // ---> throw NullPointerException
Run Code Online (Sandbox Code Playgroud)
根据我的理解,null是Null特征的唯一实例,它扩展了Anyref和==,并且两者都是AnyRef的函数.那么为什么第一个声明不会抛出而第二个声明呢?
在Scala中有一种方法可以比较两个序列,如果它包含相同的元素,它返回true,无论顺序和重复如何?
Seq("1", "2") vs Seq("2", "1") => true
Seq("3", "1", "2") vs Seq("2", "1", "3") => true
Seq("1", "1", "2") vs Seq("2", "1") => true
Run Code Online (Sandbox Code Playgroud)
谢谢
备注:这是不是一个重复的这个,因为它也要求以排除从单向复制,它是不是使用LIST的序列.