Ich frage mich nur, ob diese und andere verwandte Funktionen wie diese Integer eines dieser Dinge sind, mit denen man nicht belästigt werden sollte und gehen Sie einfach mit Long a = 1L
; einfach und unkompliziert.Gibt es einen Unterschied zwischen Long a = Long.valueOf (1) oder Long a = 1L?
Antwort
Sie sind im Wesentlichen die gleichen, der Compiler intern erstellt einen Aufruf von Long.valueOf(), wenn es ein primitives Long in ein Long konvertieren muss, wird dies "Boxen" genannt.
In normalen Code sollten Sie den primitiven Typ lang verwenden, es ist effizienter als Long. Sie benötigen Long nur dann, wenn Sie Objekte benötigen, beispielsweise um lange Werte in Sammlungen zu setzen.
Mal sehen, was unter den Abdeckungen passiert. Betrachten Sie zunächst Folgendes:
public class Example {
public static void main(String[] args) {
Long a = Long.valueOf(1L);
System.out.println(a);
}
}
Kompilieren Sie dies mit javac Example.java
. Dann zerlegen Sie es mit javap -c Example
. Das Ergebnis ist die folgende:
Compiled from "Example.java"
public class Example extends java.lang.Object{
public Example();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: lconst_1
1: invokestatic #2; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
4: astore_1
5: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream;
8: aload_1
9: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/Object;)V
12: return
}
Ok, ändern nun das Programm auf die folgenden:
public class Example {
public static void main(String[] args) {
Long a = 1L;
System.out.println(a);
}
}
Compile und zerlegen Sie es erneut.
Sie werden sehen, dass diese Version des Programms genau so kompiliert wie die erste Version; Der Compiler hat den Aufruf an Long.valueOf(...)
automatisch generiert.
Siehe: Autoboxing
- 1. Gibt es einen Unterschied zwischen A a; und A a = A()?
- 2. Gibt es einen Unterschied zwischen if (a == 5) oder if (5 == a) in C#?
- 3. Unterschied zwischen a + = 10 und a = a + 10 in Java?
- 4. Gibt es einen Unterschied zwischen NOT (Spaltenname wie '% a%') und Spaltenname nicht wie '% a%'
- 5. Unterschied zwischen a - = b und a = a - b in Python
- 6. Unterschied zwischen Long und Int in C#?
- 7. Unterschied zwischen 'a == null' und 'null == a'
- 8. Unterschied zwischen „? Alert (a) '' und '' alert (a); var a = 1; '' in JavaScript
- 9. Der Unterschied zwischen unsigned long und UINT64
- 10. long long vs int Multiplikation
- 11. Unsigned Long Long außerhalb des zulässigen Bereichs?
- 12. unsigned long long arithmetics
- 13. Wie printf ein unsigned long long int (der Formatbezeichner für unsigned long long int)?
- 14. Unterschied zwischen a || a = b und a = a || b in Rubin?
- 15. C++ kann 'long double' nicht in 'long double *' für Argument '1' in 'long konvertieren
- 16. Unterschied zwischen $ ('# tabs a') und $ ('# tabs'). Finden ('a')
- 17. Was ist der Unterschied zwischen auto a = A (3) und A a (3)?
- 18. Was ist der Unterschied zwischen Long und Long in Android-Code?
- 19. Numpy: Unterschied zwischen a [i] [j] und a [i, j]
- 20. Unterschied zwischen diesen Ausdrücken: int * a = 0; int * a = 10;
- 21. Unterschied zwischen $ a == 5 und 5 == $ a in php
- 22. Printing unsigned long long int Wert Typ Gibt seltsame Ergebnisse
- 23. Sollte ich Long Long oder Int64_t für tragbaren Code verwenden?
- 24. Was ist der Unterschied zwischen "a ist b" und "id (a) == id (b)" in Python?
- 25. Umwandlung von String (Strtold) zu Long Double und Subtrahieren von Long Double gibt> Epsilon
- 26. Unsigned Long Long Double in Swift
- 27. Long Int Literal - Ungültige Syntax?
- 28. unsigned long lang VS unsigned long long int
- 29. Steckt unsigned long long Array erstellen
- 30. C++ unterzeichnet und unsigned int vs long long Geschwindigkeit
Diese Frage wurde inspiriert von: http://stackoverflow.com/questions/130965/what-is-the-worst-code-youve-ever-written/1213190#1213190? – outis
Nö hat diese Frage nie zuvor gesehen –