2011-10-09 10 views
9

Più precisamente, è una parte della classe Integer (una versione ridotta o qualcosa del genere) o è qualcosa di completamente diverso?Int è un oggetto in Java?

Sono consapevole che int è un tipo di valore e Integer un tipo di riferimento, ma int eredita comunque da Object?

(io parto dal presupposto che in questo senso int, long, booleano ecc sono tutte simili. Int è stato appena scelto per comodità)

risposta

16
  • I tipi base in Java non sono oggetti e non ereditano da Oggetto.

  • Poiché Java 1.5 ha introdotto il box automatico tra int e Integer (e gli altri tipi).

  • Perché interi non sono oggetti che non possono essere utilizzati come parametri di tipo generico per esempio il T in list<T>

0

tipi primitivi non sono oggetti, ma sono memorizzati direttamente in qualunque contesto essi sono necessari . Se hanno bisogno di essere trattati come un oggetto, possono essere inseriti in un intero.

+0

Quindi stai dicendo oggetto = tipo di riferimento? – soandos

+0

@soandos: sì. Tutte le istanze di classe in Java sono tipi di riferimento. – siride

1

Se si parla di Integer:

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

Inoltre, questa classe fornisce diversi metodi per convertire un int in String e una String in un int, nonché altre costanti e metodi utili quando si ha a che fare con un int.

int non è un oggetto, è un tipo primitivo.

+0

Quindi non eredita dall'oggetto? – soandos

+0

@soandos: eredita da * nothing *. Non può ereditare il periodo in quanto i primitivi non sono tipi di riferimento. Questo è simile ai tipi semplici di C#. –

+0

In altri linguaggi le strutture possono ereditare quindi il semplice fatto che sia una primitiva non è sufficiente – soandos

16

Da "Primitive Data Types": "I tipi primitivi sono tipi di dati speciali integrate nel linguaggio, sono non oggetti creati da una classe. " Questo, a sua volta, significa che no, int non eredita da java.lang.Object in alcun modo perché solo "oggetti creati da una classe" lo fanno. Considerate:

int x = 5; 

Affinché la cosa nominata x di ereditare da Object, che cosa avrebbe bisogno di avere un tipo. Nota che sto distinguendo tra lo x e la cosa che nomina. x ha un tipo, che è int, ma la cosa denominata x è il valore 5, che non ha tipo in sé e per sé. Non è altro che una sequenza di bit che rappresenta il valore integrale "5". Al contrario, in considerazione:

java.lang.Number y = new java.lang.Integer(5); 

In questo caso, y ha il numero del tipo, e la cosa nominata y ha il tipo Integer. La cosa chiamata è un oggetto. Ha un tipo distinto indipendentemente dallo o da qualsiasi altra cosa.

+1

+1 per il fastidio di trovare un riferimento – mikek3332002

+0

Ho un dubbio: un metodo, il cui tipo restituito è un 'Object', può effettivamente restituire' int'? Se sì, allora, come posso ottenere il 'int' indietro da' Object' nell'ambiente chiamante? –

+0

@KaranChadha Dovresti postare questa come una nuova domanda invece di un commento. Assicurati di controllare in giro per vedere se la stessa domanda è già stata richiesta in precedenza, però. –

Problemi correlati