Scala中的Int和Integer有啥区别?
Posted
技术标签:
【中文标题】Scala中的Int和Integer有啥区别?【英文标题】:What is the differences between Int and Integer in Scala?Scala中的Int和Integer有什么区别? 【发布时间】:2010-11-19 03:26:15 【问题描述】:我正在处理一个声明为整数的变量,并发现 > 不是整数的成员。这是一个简单的例子:
scala> i
warning: there were deprecation warnings; re-run with -deprecation for details
res28: Integer = 3
scala> i > 3
<console>:6: error: value > is not a member of Integer
i > 3
^
将其与 Int 进行比较:
scala> j
res30: Int = 3
scala> j > 3
res31: Boolean = false
Integer 和 Int 有什么区别?我看到了弃用警告,但我不清楚它为什么被弃用,鉴于已经弃用,为什么它没有 > 方法。
【问题讨论】:
感谢大家提供有用的答案。你们都回答了我的问题,所以我会让评分最高的回答上升到顶部并将其标记为答案。同时,我已对您的所有回复进行了评分。 【参考方案1】:Integer 从 java.lang.Integer 导入,仅用于与 Java 兼容。既然是Java类,当然不能有一个叫“
编辑:您可以通过声明从 Integer 到 Int 的隐式转换来缓解此问题。
【讨论】:
【参考方案2】:Integer 从 java.lang.Integer 导入,仅用于与 Java 兼容。既然是Java类,当然不能有一个叫“
implicit def toInt(in:Integer) = in.intValue()
您仍然会收到弃用警告。
【讨论】:
【参考方案3】:“Integer 和 Int 有什么区别?”
Integer 只是 java.lang.Integer 的别名。 Int 是具有额外功能的 Scala 整数。
查看 Predef.scala 你可以看到这个别名:
/** @deprecated use <code>java.lang.Integer</code> instead */
@deprecated type Integer = java.lang.Integer
但是,如果需要,可以从 Int 隐式转换为 java.lang.Integer,这意味着您可以在采用 Integer 的方法中使用 Int。
至于为什么不推荐使用它,我只能假设这是为了避免混淆您使用的是哪种整数。
【讨论】:
【参考方案4】:Integer
是一个 Java 类,java.lang.Integer
。它不同于Java 的原始类型int
,它不是一个类。它不能定义<
,因为Java 不允许为类定义运算符。
现在,您可能想知道为什么会存在这种类型?好吧,原始类型不能作为引用传递,因此您不能将int
传递给期望java.lang.Object
的方法,例如,等效于Scala 的AnyRef
。为此,您将int
放入Integer
对象中,然后传递Integer
。
【讨论】:
【参考方案5】:我认为您看到的问题是值类型的装箱/拆箱以及 Java 类 Integer 的使用。
我想答案就在这里:Boxing and unboxing in Scala。 Scala 中没有隐含的拆箱。您已将 i 定义为 Java 类 Integer,但在 i > 3 中,正在处理 3 和一个 int。
【讨论】:
链接已断开。以上是关于Scala中的Int和Integer有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章