2011-12-27 7 views
16

最近、インタビュアーがオブジェクトとプリミティブの違いを定義するよう依頼しました。すべての言語がプリミティブで始まると考えると、奇妙な質問のように思えます。あなたはこの質問にどう答えましたか?オブジェクト対プリミティブ

このインタビューはフロントエンドの開発ポジションであったため、彼が言及していた言語(私が想定している)はJavaScriptだったことにも注意してください。

+2

あなたは、インタビュアーがJavaScriptを参照しているとおっしゃったとお伝えしました。簡単な質問がそれを明らかにしたときに彼が何を求めているのかを推測することはありません。 –

+1

良いアドバイスは、彼が何を得ていたのかを判断する助けとなりました。 –

答えて

30

プリミティブは他のデータ型で構成されていないデータ型であり、それ以上分解することはできません。それはプログラミングシナリオの原子のようなものです。原子は物質の基本単位であり、それから派生するものは何もないので、私は原子を言う。

つまり、Cのintを小さなデータ型に分解することはできません。他方、オブジェクトは、複数のプリミティブ型からなる分子と考えることができる。たとえば、はC++標準ライブラリの一部として提供されます。しかし、それはオブジェクトであり、内部的に小さなデータ型で構成され、メソッドを含んでいます。

すべてのオブジェクト指向言語がクラスベース(たとえばJavascript)ではないことに注意することが重要です.Javascriptでクラスを定義することはできないため、オブジェクトはここではかなり異なっています。 Javascriptのすべてがオブジェクト(Rubyも)ですが、Numberオブジェクトは実際には内部プリミティブのラッパーです。

7

のJava視点から:

  1. プリミティブは、他のデータ型で構成されていません。どこのオブジェクトとして することができ、一般的です。
  2. プリミティブは値によって渡されます。すなわち、プリミティブ自身のコピー が渡されます。オブジェクトの場合、参照のコピーは、オブジェクト自体ではなく に渡されます。
  3. プリミティブは独立したデータ型です。すなわち、 階層/スーパークラスが存在しません。すべてのオブジェクトはクラス "オブジェクト"の子孫です。
  4. すべてのオブジェクトには、それ自身のいくつかのデフォルトメソッドがあり、オブジェクト(toString()、clone()、wait()、notify()、 notifyAll()など)から を継承します。プリミティブには、自分自身に関連付けられたメソッド はありません。
  5. プリミティブは変更不可能なので、特別な設定なしでそのまま使用できます。 オブジェクトの場合、特別な注意を払う必要がありますが、デフォルトでは変更不可能ではありません。
  6. オブジェクトには、浅いと深いの2種類のコピーがあります。そこには という大きな違いがあります。したがって、選択は に依存します。どのように使用するのですか?プリミティブでは、このような違いはありません。すべてデフォルトでディープコピーのみです。
関連する問題