2016-07-13 29 views
6

stavo attraversando il libro "Java-The Complete Reference" e mi sono imbattuto in una frase che dice cheL'ambiente run-time java è libero di utilizzare qualsiasi dimensione desideri per i tipi di dati primitivi?

"La larghezza di un tipo integer non deve essere pensato come la quantità di memoria che consuma, ma piuttosto come il comportamento che definisce per variabili ed espressioni di quel tipo.L'ambiente run-time java è libero di usare qualsiasi dimensione voglia, purché i tipi si comportino come tu li hai dichiarati ".

Ciò significa che java è libero di scegliere la dimensione del tipo di dati intero che è in genere di 4 byte?

+0

Java definisce quattro tipi interi, ad esempio long, int, short, byte. Quindi non essere confuso con i tipi interi e int. In java int è di 32 bit. – zombie

+0

Sì, ne sono consapevole, ma non sono in grado di capire cosa significhi realmente quella frase. Per favore, mi spieghi che? –

+0

@AsteriskNinja Quindi stai dicendo che quando modifichiamo ad esempio da int a long, java decide di usare una larghezza lunga che è di 64 bit? –

risposta

7

"La larghezza di un tipo intero non deve essere pensato come la quantità di stoccaggio consuma,

una JVM può memorizzare il tipico Java 16 bit short in 32 bit su 32-bit implementazioni per migliorare le prestazioni ..

ma piuttosto come il comportamento definisce per le variabili e le espressioni di quel tipo. l'ambiente di runtime Java è fre e usare qualsiasi dimensione che vuole, a patto che i tipi si comportino come li hai dichiarati ".

.. ma per uno sviluppatore Java, sarà comporterà come un 16 bit firmato intero complemento a due, a prescindere da come è fisicamente memorizzati nel computer.

Questo ha perfettamente senso. Vuoi che il tuo programma funzioni su qualsiasi JVM, quindi tutte le JVM devono trattare il tuo programma e i suoi interi allo stesso modo. Ma il modo in cui la JVM viene implementata non ha importanza per uno sviluppatore Java, quindi consente ottimizzazioni specifiche per l'architettura.

Come note @BasilBourque nei commenti: Questa è l'idea di base dietro tutte le specifiche per il linguaggio Java e per JVM: Definire i comportamenti richiesti, ma lasciare i dettagli di implementazione all'implementatore. Ci sono state molte implementazioni di Java nel corso degli anni, tutte si comportano allo stesso modo, ma variano in modo drammatico rispetto a ciò che è "sotto il cofano".

+0

Ok, ho capito grazie –

+0

La grande spiegazione ha chiarito i miei dubbi. Grazie –

+1

La spiegazione di Arjan è molto ben detta e corretta. Aggiungo solo che questa è l'idea alla base di tutte le specifiche per il linguaggio Java e per la JVM: * Definire i comportamenti richiesti, ma lasciare i dettagli di implementazione all'implementatore. * Ci sono state molte implementazioni di Java nel corso degli anni , tutti si comportano allo stesso modo, ma variano in modo drammatico rispetto a ciò che è "sotto il cofano". –