Was ist der Unterschied zwischen Int und Integer in Scala?
Arbeitete ich mit einer variable hatte ich deklariert als eine ganze Zahl und entdeckt, dass > nicht Mitglied von Integer. Hier ein einfaches Beispiel:
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
^
Vergleichen, die einen Int-Wert:
scala> j
res30: Int = 3
scala> j > 3
res31: Boolean = false
Was sind die Unterschiede zwischen Integer und Int? Ich sehe das deprecation Warnung, aber es ist mir unklar, warum es veraltet und angesichts der Tatsache, dass es war, warum es nicht eine > Methode.
- Danke, alle, für die nützlichen Antworten. Sie alle meine Frage beantworten, also lasse ich die am höchsten bewerteten Antwort Aufstieg an die Spitze, und markieren Sie diese als Antwort. In der Zwischenzeit habe ich bewertet alle Ihre Antworten bis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Was sind die Unterschiede zwischen Integer und Int?"
Ganze Zahl ist nur ein alias für java.lang.Integer. Int ist die Scala ganze Zahl mit dem extra-Funktionen.
Suchen in Vordef.scala können Sie sehen, dieses die-alias:
Jedoch gibt es eine implizite Umwandlung von Int in java.lang.Integer, wenn Sie es brauchen, das heißt, Sie können mit Int in Methoden, die einen Integer.
Warum es veraltet ist, kann ich nur vermuten, es war um Verwirrung zu vermeiden, über die Art der integer mit dem Sie arbeiten wurden.
Integer-Daten werden importiert aus java.lang.Integer und ist nur für die Kompatibilität mit Java. Da es eine Java-Klasse ist, kann er natürlich nicht über eine Methode namens "<".
EDIT: kann das problem gemindert werden, indem Sie deklarieren eine implizite Konvertierung von Integer zu Int.
Erhalten Sie noch deprecation Warnung jedoch.
Ich denke, das problem, das Sie sehen, hat zu tun hat, boxing/unboxing von Datentypen und die Verwendung der Java-Klasse Integer.
Ich denke, die Antwort ist hier: Boxing und unboxing in Scala. Es gibt keine implict unboxing in Scala. Sie definiert habe ich wie die Java-Klasse, die Integer -, sondern in der i > 3, die 3 behandelt und eine int.
Integer
ist eine Java-Klassejava.lang.Integer
. Es unterscheidet sich von der Java-primitive-Typint
, welche keine Klasse. Es kann nicht<
definiert, da in Java nicht zulassen, dass die Betreiber definiert werden, die für die Klassen.Nun, Sie Fragen sich vielleicht, warum ein solcher Typ überhaupt? Gut, primitive Typen können nicht als Referenzen übergeben werden, so dass Sie nicht passieren können einen
int
um eine Methode erwartetjava.lang.Object
entspricht ScalaAnyRef
zum Beispiel. Zu tun, dass manint
innerhalb einerInteger
- Objekt, und übergeben Sie dann dieInteger
.Integer-Daten werden importiert aus java.lang.Integer und ist nur für die Kompatibilität mit Java. Da es eine Java-Klasse ist, kann er natürlich nicht über eine Methode namens "<".
EDIT: kann das problem gemindert werden, indem Sie deklarieren eine implizite Konvertierung von Integer zu Int.