web-dev-qa-db-ja.com

オブジェクトとプリミティブ

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

また、このインタビューはフロントエンドの開発職向けであったため、彼が言及していた言語(おそらく)はJavaScriptであったことにも注意してください。

23

プリミティブは、他のデータ型で構成されておらず、これ以上分解できないデータ型です。それはプログラミングシナリオのアトムのようなものです。 atom atomは物質の基本単位であり、そこから導き出せるものは何もないためです。

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

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

39

Javaの視点から:

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

プリミティブは、int、string(組み込みデータ型など)のようにこれ以上分割できないと思います。逆に、オブジェクトは配列や構造のような小さな断片に分割できます。

私は学生です。これは私の意見です。
私の答えが間違っていると思われる場合は、私を修正できます。
ありがとう

0

実際の違いを視覚化しましょう。

プリミティブ

1)プリミティブデータタイプは、少量のメモリを使用して単一のデータ項目を表します。同じプリミティブ型のすべてのデータは同じサイズです。

例:プリミティブ型intは、32ビットを使用する整数を表します。 int型のすべての変数は32ビットを使用します。

2)Javaには、byte、short、int、long、float、double、char、およびbooleanの8つのプリミティブデータタイプしかありません。 Javaプログラムは他のプリミティブデータ型を定義できません。

オブジェクト

オブジェクトは、データを処理するためのメソッド(小さなプログラム)とともに大量のデータを含む可能性のある大きなメモリの塊です。 Javaには標準で付属しているオブジェクトクラスが数千あり、プログラマは簡単に追加のクラスを作成できます。 (何千もの標準クラスがありますが、このコースでは、十数ほどのクラスに慣れる必要があります。)

0
N.Neupane