Qual è la differenza tra Integer e int in Java?


248

Ad esempio, perché puoi fare:

int n = 9;

Ma no:

Integer n = 9;

E puoi fare:

Integer.parseInt("1");

Ma no:

int.parseInt("1");

35
intero è classe, int è un tipo primitivo
Anycorn,

24
È possibile fare Integer n = 9;a causa di autoboxing (a meno che non si sta utilizzando una versione molto vecchia di java)
Alderath

Risposte:


320

intè un tipo primitivo. Le variabili di tipo intmemorizzano il valore binario effettivo per l'intero che si desidera rappresentare. int.parseInt("1")non ha senso perché nonint è una classe e quindi non ha alcun metodo.

Integerè una classe, non diversa dalle altre nel linguaggio Java. Le variabili del tipo Integermemorizzano i riferimenti agli Integeroggetti, proprio come con qualsiasi altro tipo di riferimento (oggetto). Integer.parseInt("1")è una chiamata al metodo statico parseIntdalla classe Integer(si noti che questo metodo restituisce effettivamente un inte non un Integer).

Per essere più specifici, Integerè una classe con un singolo campo di tipo int. Questa classe viene utilizzata laddove è necessario intessere trattati come qualsiasi altro oggetto, ad esempio in tipi generici o situazioni in cui è necessaria la nullità.

Si noti che ogni tipo primitivo in Java ha una classe wrapper equivalente :

  • byte ha Byte
  • short ha Short
  • int ha Integer
  • long ha Long
  • boolean ha Boolean
  • char ha Character
  • float ha Float
  • double ha Double

Le classi wrapper ereditano dalla classe Object e le primitive no. Quindi può essere utilizzato in raccolte con riferimento agli oggetti o con Generics.

Da java 5 abbiamo il box automatico e la conversione tra classe primitiva e wrapper avviene automaticamente. Attenzione, tuttavia, in quanto ciò può introdurre bug sottili e problemi di prestazioni; essere espliciti sulle conversioni non fa mai male.


6
In C#tutti i tipi di dati hanno "alias" e int.Parse()ha senso (anche se in realtà non lo fa)
Vahid Amiri,

22
@ VSG24 ... ma questa era una domanda Java, e questa è una risposta Java. C#è completamente irrilevante qui.
Darkhogg,

3
Un buon esempio potrebbe essere: errore di compilazione: elenco <int> valido: elenco <numero intero>
hagai

Ulteriori conoscenze ne traggono sempre beneficio
sumit sharma,

1
Mi piace imparare cose nuove, soprattutto quando la conoscenza è correlata all'argomento attuale. Grazie Vahid.
Paul Oliver,

30

Integer è una classe e int è un tipo primitivo.

Continua a leggere a questi link:


1
Voglio sottolineare, penso che questa sia la risposta perfetta per due motivi: 1- Conciso e preciso, tenendo presente il pubblico / chi chiede in mente 2- Fornisce la direzione per ulteriori dettagli piuttosto che mettere tutto nel testo della risposta Non tutti A queste domande è possibile rispondere in modo preciso e conciso (alcuni richiedono molti più dettagli e sfumature per essere accurati e completi), ma penso che tutte le risposte dovrebbero cercare di essere così semplici e dirette.
DRich,

11
Heh, penso che sia in realtà il contrario. "int è un tipo primitivo" non ti dice nulla, se non sai cos'è un tipo primitivo. (E se lo fai, molto probabilmente conosci già la differenza tra int e Integer). E l'invio del lettore a due collegamenti etichettati "Link 1" e "Link 2" è piuttosto inutile, soprattutto se paragonato al solo citare le sezioni pertinenti.
Steve Bennett,

7

Un numero intero è praticamente solo un wrapper per il tipo primitivo int. Ti consente di utilizzare tutte le funzioni della classe Integer per semplificarti la vita.

Se non conosci Java, qualcosa che dovresti imparare ad apprezzare è la documentazione Java. Ad esempio, tutto ciò che vuoi sapere sulla classe Integer è documentato in dettaglio.

Questo è direttamente dalla documentazione per la classe Integer:

La classe Integer racchiude un valore di tipo primitivo int in un oggetto. Un oggetto di tipo Integer contiene un singolo campo il cui tipo è int.


7
Questo in qualche modo manca il punto. Ad esempio, poiché Integerè una classe, può essere archiviata in contenitori (a differenza dei tipi primitivi).
Oliver Charlesworth,

6

Una variabile int contiene un valore intero con segno a 32 bit. Un numero intero (con la I maiuscola) contiene un riferimento a un oggetto di tipo (classe) Numero intero o su null.

Java esegue automaticamente il cast tra i due; da Integer a int ogni volta che l'oggetto Integer si presenta come argomento a un operatore int o viene assegnato a una variabile int, oppure un valore int viene assegnato a una variabile Integer. Questo casting si chiama boxe / unboxing.

Se una variabile Integer che fa riferimento a null è unbox, esplicitamente o implicitamente, viene generata una NullPointerException.

(Nel testo sopra, il termine "variabile" significa variabile locale, campo o parametro)


5

Integersi riferisce al tipo di wrapper in Java mentre intè un tipo primitivo. Tutto tranne i tipi di dati primitivi in ​​Java viene implementato proprio come gli oggetti che implicano Java è un linguaggio di programmazione orientato agli oggetti puro altamente qualificato. Se necessario, tutti i tipi di primitive sono disponibili anche come tipi di wrapper in Java. Puoi avere alcuni vantaggi in termini di prestazioni con i tipi primitivi, e quindi i tipi di wrapper dovrebbero essere usati solo quando è necessario.

Nel tuo esempio come sotto.

Integer n = 9;

la costante 9viene auto-boxata ( auto-boxinge si unboxingverifica automaticamente da quel momento in java 5poi) Integere quindi puoi usare l'istruzione in questo modo e anche Integer n = new Integer(9). Questo è effettivamente ottenuto attraverso l'affermazioneInteger.valueOf(9).intValue();


3

int è un tipo primitivo e non un oggetto. Ciò significa che non ci sono metodi associati ad esso. Intero è un oggetto con metodi (come parseInt).

Con java più recenti sono disponibili funzionalità di boxe automatico (e unboxing). Ciò significa che il compilatore inserirà Integer.valueOf (int) o integer.intValue () dove necessario. Ciò significa che è effettivamente possibile scrivere

Integer n = 9;

che viene interpretato come

Integer n = Integer.valueOf(9);

3

Numero intero è una classe / oggetto wrapper e int è di tipo primitivo. Questa differenza gioca un ruolo enorme quando si desidera memorizzare i valori int in una raccolta, perché accettano solo oggetti come valori (fino a jdk1.4). JDK5 in poi a causa del box automatico è una storia completamente diversa.


5
JDK5 + accetta anche solo oggetti; è solo che l'autoboxing consente al compilatore di chiamare automaticamente Integer.valueOf(i)o Integer.intValue()per te. Collection<int>non funzionerà ancora. Quindi non è una storia completamente diversa - è la stessa storia, con solo un po 'di stenografia.
yshavit,

concordato. Spiacenti, la mia formulazione potrebbe non riflettere questo.
Kosa,

3

In Java int è un tipo di dati primitivo mentre Integer è una classe Helper, viene utilizzato per convertire un tipo di dati in un altro.

Per esempio:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

I tipi di dati primitivi memorizzano la memoria disponibile più veloce in cui la classe Helper è complessa e vengono archiviati nella memoria heap.

riferimento da "David Gassner" Java Essential Training.


2

intè un tipo primitivo che rappresenta un numero intero. mentre Integerè un oggetto che avvolge int. L' Integeroggetto offre più funzionalità, come la conversione in esadecimale, stringa, ecc.

Puoi anche usare i concetti OOP con Integer. Ad esempio, puoi usare Integer per generics (es .).Collection<Integer>


2

Questo è tratto da Java: The Complete Reference, Ninth Edition

Java utilizza tipi primitivi (chiamati anche tipi semplici), come int o double , per contenere i tipi di dati di base supportati dalla lingua. I tipi primitivi , anziché gli oggetti, vengono utilizzati per queste quantità per motivi di prestazioni . L'uso di oggetti per questi valori aggiungerebbe un sovraccarico inaccettabile anche al più semplice dei calcoli. Pertanto, i tipi primitivi non fanno parte della gerarchia degli oggetti e non ereditano Object .

Nonostante il vantaggio in termini di prestazioni offerto dai tipi primitivi, ci sono momenti in cui è necessaria una rappresentazione dell'oggetto. Ad esempio, non è possibile passare un tipo primitivo facendo riferimento a un metodo . Inoltre, molte delle strutture di dati standard implementate da Java operano su oggetti, il che significa che non è possibile utilizzare queste strutture di dati (specifiche dell'oggetto) per memorizzare i tipi primitivi . Per gestire queste (e altre) situazioni, Java fornisce wrapper di tipo, che sono classi che incapsulano un tipo primitivo all'interno di un oggetto.

Le classi wrapper si riferiscono direttamente alla funzione di autoboxing di Java . I wrapper di tipo sono Double, Float, Long, Integer, Short, Byte, Character e Boolean . Queste classi offrono una vasta gamma di metodi che consentono di integrare completamente i tipi primitivi nella gerarchia di oggetti Java.


1

Per ottimizzare il runtime del codice Java, sono stati aggiunti int tipi primitivi inclusi float, boolecc. , Ma vengono forniti con le classi wrapper in modo che, se necessario, è possibile convertirli e usarli come oggetto Java standard insieme a molte utilità fornite come membro funzioni (come Integer.parseInt("1")).


1

intè un tipo di dati primitivo mentre Integerè un tipo di riferimento o wrapper (classe) in Java.

dopo di java 1.5che introdurre il concetto di autoboxing e unboxing è possibile inizializzare entrambi into in Integerquesto modo.

int a= 9
Integer a = 9 // both valid After Java 1.5.

perché Integer.parseInt("1");ma no int.parseInt("1");??

Integerè una classe definita in jdklibreria ed parseInt()è un metodo statico che appartiene alla Integerclasse

Quindi, Integer.parseInt("1");è possibile in Java. ma intè di tipo primitivo (assume come una parola chiave) in Java. Quindi, non si può chiamare parseInt()con int.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.