2010-01-20 17 views
8

Perché esiste un tipo primitivo per intero (int) anche se abbiamo un numero intero come intero? Ma lo stesso non è con il tipo String. Non esiste un tipo così primitivo per String. Sempre String si occupa del riferimento all'oggetto?Numero intero come tipo primitivo

risposta

18

Velocità. È molto più veloce per il codice macchina aggiungere due int utilizzando le istruzioni della CPU nativa, piuttosto che dover prendere due oggetti Integer, estrarre i valori int da essi, quindi aggiungerli, creando un nuovo oggetto intero risultato per contenere il risultato. (how JNI maps primitives)

Le stringhe sono complesse, hanno molti metodi e come tali non hanno contrappunti di codice macchina. Sono promossi a un vero oggetto. Inoltre, una stringa condivide lo stato con altre stringhe create con lo stesso valore. Nessun valore primitivo condivide lo stato con altri valori primitivi come questo. (immutable can be shared | primitive no sharing)

+1

Vorrei anche aggiungere spazio. Meno spazio per memorizzare un intero in memoria, rispetto a un intero oggetto con tutte le sue operazioni. – Alex

0

Un tipo di dati stringa è notevolmente più complesso di un int - c'è una quantità variabile di memoria per contenere una stringa per una cosa.

1

Questo perché i processori (CPU) hanno il supporto diretto per i tipi interi ma non per le stringhe. E per motivi di performance Java supporta alcuni tipi nativi che potrebbero essere supportati dai processori su cui JVM potrebbe essere eseguito.

0

Ultimamente i calcoli vengono eseguiti a livello macchina. Mi chiedo cosa faccia la differenza tra i primitivi e gli oggetti in termini di prestazioni. La risposta elaborata sarà apprezzata.

+0

questo dovrebbe essere un commento - non una "risposta" si prega di competere il tour SO qui: http://stackoverflow.com/tour –