2015-10-01 44 views
1

当他们说“盒装数字类型什么是scala docs for [email protected]####文档中“boxed numeric”是什么意思?

该帖从文档是(突出矿):

相当于x.hashCode除了盒装数值类型和空。 对于NUMERICS,则返回...

  1. 我认为 “为NUMERICS” 应改为 “盒装 NUMERICS”?
  2. 什么是盒装数字 - 它们的意思是Boxed[Int],例如?

这个问题读Synthetic Function “##” in scala

我认为一个value type is a subtype of scala.AnyVal并且不作为对象实现之后是约,因此不盒装

回答

2

hashCode方法用于java.lang.Object定义(或scala.AnyRef),但对原始(“未装箱”)类型没有等效。当您在原语上调用hashCode时,您将拥有盒装类型的散列码,例如,

3.0.hashCode // 1074266112 

这里3.0 autoboxed到java.lang.Double,因此提供hashCode方法。

斯卡拉增加##允许基元的正确比较,例如,

3 == 3.0 // true 

这是因为##是从哈希码在这里不同:

3.0.## // 3 ! 

为参考值,##行为一样hashCode

"foo".##  // 101574 
"foo".hashCode // 101574 
+0

谢谢。在我原来的问题中,你是这样说的:“* for numerics *”应该被解释为“*用于数字(盒装或其他)*”;和* boxed数字类型*专指'java.lang.Number'的子类型的'java.lang'原始包装类型?不是Scala的目标环境而不是JVM?那里有个“盒装数字型”的含义是什么? – bejeb

+0

是的,是的。例如在JS中 - http://www.scala-js-fiddle.com/ - 'println(3.0.asInstanceOf [AnyRef] .hashCode)'会给你3. –

+0

从我可以看到的来自javap'##'在调用实用程序方法获取结果之前,还会自动执行JVM中的双字面值。这一切都有道理,谢谢。 – bejeb