Basta chiedersi se questa e altre funzioni correlate come quelle di Integer sono una di quelle cose a cui non ci si deve preoccupare e basta andare con Long a = 1L
; semplice e diretto.C'è qualche differenza tra Long a = Long.valueOf (1) o Long a = 1L?
risposta
Sono essenzialmente gli stessi, il compilatore crea internamente una chiamata a Long.valueOf() quando deve convertire una primitiva lunga in una lunga, questo è chiamato "boxing".
Nel codice normale è necessario utilizzare il tipo primitivo a lungo, è più efficiente di Long. Hai bisogno di Long solo quando hai bisogno di oggetti, ad esempio per inserire valori lunghi in raccolte.
Vediamo cosa succede sotto le coperte. In primo luogo, considerare questo:
public class Example {
public static void main(String[] args) {
Long a = Long.valueOf(1L);
System.out.println(a);
}
}
compilare questo con javac Example.java
. Quindi smontarlo con javap -c Example
. Il risultato è il seguente:
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, ora cambiare il programma al seguente:
public class Example {
public static void main(String[] args) {
Long a = 1L;
System.out.println(a);
}
}
Compilare e smontare di nuovo.
Vedrete che questa versione del programma si compila esattamente come la prima versione; il compilatore ha generato automaticamente la chiamata a Long.valueOf(...)
.
Vedi: Autoboxing
- 1. C++ doppia a long long
- 2. Python type long vs C 'long long'
- 3. Differenza tra long e int in C#?
- 4. La differenza tra unsigned long e UINT64
- 5. Dimensioni di "long long" nella macchina a 128 bit?
- 6. Doppio a `unsigned long long` provoca memoria (pila?) La corruzione
- 7. Oracle: LONG o CLOB?
- 8. unsigned long long int pow
- 9. C++: long long int vs long int vs int64_t
- 10. (lldb) Stampa unsigned long long in hex
- 11. Come convertire 'long long' (o __int64) in __m64
- 12. Qual è la differenza tra unsigned long/long/int in c/C++?
- 13. Qual è la differenza tra long e long nel codice Android?
- 14. Perché non è common_type <long, unsigned long> :: type = long long?
- 15. Passa il parametro long a asp.net webapi
- 16. Il GCC supporta long long int?
- 17. Converti lat/long a coordinate X/Y
- 18. LONG Blob innodb o MyISAM
- 19. Divide Long Long Number in percentuale
- 20. C#: Come convertire da long a ulong
- 21. sizeof (long) in C++ a 64 bit
- 22. Link a Google Streetview utilizzando Lat/Long
- 23. Converti long a due int e viceversa
- 24. a cosa serve il metodo Long.reverse (long)?
- 25. "+ =" operatore e int long use
- 26. GWT OverlayTypes Date and Long
- 27. Come trovo il lat/long che è x km a nord di un dato lat/long?
- 28. Long primitive o AtomicLong per un contatore?
- 29. Funzione hash per un paio di long long?
- 30. Long type 64bit linux
stata questa domanda ispirata da: http://stackoverflow.com/questions/130965/what-is-the-worst-code-youve-ever-written/1213190#1213190? – outis
Nope non ha mai visto prima quella domanda –