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,它不是一个类。它不能定义&lt;,因为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有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

int和integer有啥区别

integer和int有啥区别

Java中的整数和int有啥区别?

Int 和 Integer 有啥区别?

int[] 和 Integer[] 数组 - 有啥区别?

int[ ] 和 Integer [ ] 有啥区别 [重复]