2011-12-27 32 views
16

Recentemente un intervistatore ha chiesto di definire la differenza tra oggetti e primitive. Sembrava una domanda strana considerando che tutte le lingue iniziano con una primitiva. Come avresti risposto a questa domanda?oggetto vs. primitivo

Vorrei anche notare che questa intervista era per una posizione di sviluppo front-end quindi il linguaggio (presumo) a cui si riferiva era JavaScript.

+2

Hai detto che presumi che l'intervistatore si riferisse a JavaScript. Penso che avresti dovuto chiedergli solo per essere sicuro - non ha alcun senso di indovinare cosa sta chiedendo quando una semplice domanda lo avrebbe chiarito. –

+1

Un buon consiglio, determinare cosa avrebbe ottenuto avrebbe aiutato. –

risposta

30

Un primitivo è un tipo di dati che non è composto da altri tipi di dati e non può essere ulteriormente suddiviso. È come gli atomi nello scenario di programmazione. Dico atomo perché l'atomo è un'unità di base della materia e non c'è nulla che possa derivarne.

Voglio dire, uno int in C non può essere scomposto in un tipo di dati più piccolo. Un oggetto, d'altra parte, può essere pensato per una molecola, costituita da più di un tipo primitivo. Ad esempio, string viene fornito come parte della libreria standard C++; tuttavia, è un oggetto ed è composto internamente da tipi di dati più piccoli e contiene metodi.

È importante notare che non tutti i linguaggi orientati agli oggetti sono basati su classi (ad esempio Javascript) Non è possibile definire una classe in Javascript, quindi un oggetto è molto diverso qui. Anche se tutto in Javascript è un oggetto (anche Ruby), l'oggetto Number è in realtà un wrapper per una primitiva interna.

7

Da Java prospettiva:

  1. Un primitivo non è composto da altri tipi di dati. Dove un oggetto può essere e generalmente lo è.
  2. I primitivi vengono passati in base al valore, ovvero viene passata una copia della primitiva stessa . Mentre per gli oggetti viene passata la copia del riferimento, non l'oggetto stesso.
  3. Le primitive sono tipi di dati indipendenti, vale a dire che non esiste una gerarchia/super classe per loro. Mentre ogni oggetto discende dalla classe "Oggetto".
  4. Ogni oggetto ha alcuni metodi predefiniti di se stesso, che eredita dall'oggetto classe (ad esempio toString(), clone(), wait(), notify(), notifyAll(), ecc.). I primitivi non hanno alcun metodo associato a se stessi.
  5. I primitivi sono immutabili, possono essere utilizzati come tali senza particolari cure . Mentre per gli oggetti, è necessario prestare particolare attenzione, sono non immutabili per impostazione predefinita.
  6. Con gli oggetti, ci sono due tipi di copie, Superficiale e Profondo. Ci è una differenza significativa tra di loro. Quindi la scelta dipende da come intendiamo usarli. Con i primitivi, non esiste tale differenza , tutto è solo per impostazione predefinita, solo per la copia profonda.
Problemi correlati