web-dev-qa-db-ja.com

プリミティブ型と参照型の違いは何ですか?

これは過去の試験問題であり、私はプリミティブ型と参照型が最初に何であるか疑問に思っていましたか?配列では、参照型は配列がオブジェクトまたは変数で構成される場所ですが、プリミティブ型はintまたは文字列だけで配列を作成する場所です。 (右?)

テストに関する質問にどのように答え、良い評価が与えられると思いますか?本当にプリミティブなARRAY型を直接参照せずに...それなしでそれを行う方法はありますか?または、配列で説明するだけでいいと思いますか。

52
QuackMan245

これらは、Javaのプリミティブ型です。

  • ブール値
  • バイト
  • ショート
  • チャー
  • int
  • 長いです
  • float
  • ダブル

他のすべての型は参照型です:それらはオブジェクトを参照します。

これは 言語の基礎に関するJavaチュートリアル の最初の部分です。

41
JB Nizet

本OCA Java SE 7より

男性と女性が根本的に異なるのと同じように(男性は火星出身、ジョンは女性は金星出身)、原始変数とオブジェクト参照変数は複数の点で互いに異なっています。基本的な違いは、プリミティブ変数は実際の値を格納するのに対して、参照変数はそれらが参照するオブジェクトのアドレスを格納することです。クラスPersonが既に定義されていると仮定しましょう。 int変数aとオブジェクト参照変数personを作成すると、図2.13に示すように値がメモリに保存されます。

int a = 77;
Person person = new Person();

enter image description here

119

原始データ型:

  • 言語によって事前定義され、キーワードによって名前が付けられます
  • 合計数= 8
    ブール値
    char
    バイト
    ショート
    整数
    長いです
    浮く
    ダブル

参照/オブジェクトのデータ型:

  • クラスの定義済みコンストラクターを使用して作成
  • オブジェクトへのアクセスに使用
  • 参照変数のデフォルト値はnullです
  • 参照変数を使用して、宣言された型または互換性のある型のオブジェクトを参照できます。
7
Gaurav Tyagi

これらはプリミティブデータ型です

  • ブール値
  • キャラクター
  • バイト
  • ショート
  • 整数
  • 長いです
  • float
  • ダブル

一方、GCが管理するメモリの先頭に格納されているオブジェクトデータ型または参照データ型が管理されているメモリのスタックに保存されます。

これが最も重要な違いです

3
Mustafa Hussain

多くの人が多かれ少なかれ参照型とプリミティブ型を正確に述べているので、Javaにはもっと関連性のある型があることに興味があるかもしれません。 Javaの型の完全なリストを次に示します(私が知っている限り(JDK 11))。

プリミティブ型

値を説明します(タイプではありません)。

11

参照タイプ

インスタンスがObject(インターフェース、クラス、列挙、配列)を拡張する具象型を記述します。さらに、TypeParameterは実際には参照型です!

Integer

注:プリミティブ型と参照型の違いにより、ボックス化に依存してオブジェクトインスタンスのプリミティブを変換したり、その逆に変換したりする必要があります。

注2:型パラメーターは、オプションの下限または上限を持つ型を表し、そのコンテキスト内で名前で参照できます(ワイルドカード型とは対照的)。型パラメーターは通常、パラメーター化された型(クラス/インターフェイス)およびメソッドに適用できます。パラメータタイプは、タイプ識別子を定義します。

ワイルドカードの種類

Superまたはextendを使用して下限または上限を設定できる不明なタイプ(TypeScriptのような)を表します。

? extends List<String>
? super ArrayList<String>

ボイドタイプ

何もない。値/インスタンスはありません。

void method();

ヌルタイプ

唯一の表現は「null」です。特にタイプ干渉計算中に使用されます。 nullは、論理的に任意の型に属する(任意の型の任意の変数に割り当てることができる)特殊なケースですが、実際にはどの型のインスタンスとも見なされません(例:(null instanceof Object)== false)。

null

ユニオンタイプ

ユニオン型は、実際には一連の代替型である型です。悲しいことにJavaには、マルチキャッチステートメントに対してのみ存在します。

catch(IllegalStateException | IOException e) {}

干渉タイプ

複数のタイプと互換性のあるタイプ。 Javaでは、クラスには最大で1つのスーパークラス(オブジェクトにはない)があるため、干渉タイプでは最初のタイプのみがクラスになり、他のすべてのタイプはインターフェイスタイプでなければなりません。

void method(List<? extends List<?> & Comparable> comparableList) {}

不明なタイプ

タイプは不明です。これは、特定のLambda定義の場合です(括弧で囲まれていない、単一のパラメーター)。

list.forEach(element -> System.out.println(element.toString)); //element is of unknown type

Varタイプ

'var'キーワードを見つけた変数宣言によって導入された不明なタイプ。

var variable = list.get(0);
2
Martin Kersten

プリミティブと参照

最初:-

プリミティブ型は、データの基本型です:byteshortintlongfloatdoublebooleanchar。プリミティブ変数はプリミティブ値を保存します。参照タイプは、配列と同様にインスタンス化可能なクラスです:StringScannerRandomDieint[]String[]など。変数は、データが保存されるメモリ内の場所にアドレスを保存します。

秒:-

プリミティブ型は値を格納しますが、参照型はヒープ領域のオブジェクトへのハンドルを格納します。参照変数は、CやC++で見られるようなポインターではなく、オブジェクトへの単なるハンドルであるため、参照変数にアクセスしてオブジェクトの状態を変更できることに注意してください。

詳細: http://javarevisited.blogspot.com/2015/09/difference-between-primitive-and-reference-variable-Java.html#ixzz3xVBhi2cr

2

簡単な答えは、プリミティブはデータ型であり、参照はポインターであり、値を保持するのではなく、値を指し、オブジェクト上で使用されるポインターです。

Primatives

ブール値

キャラクター

バイト

ショート

整数

長いです

float

ダブル

これらの基本概念を説明する優れたリファレンスがたくさんあります。 http://www.javaforstudents.co.uk/Types

1
  1. Javaには、int、double、float、long、short、byte、char、booleanの8つのプリミティブ型があります。これは、プログラマーが新しいプリミティブ型を定義できないことを意味します。
  2. 参照タイプはユーザー定義であるため、無制限の数があります。 4 Java基本参照タイプは、クラス、インターフェース、配列、列挙です。
  3. プリミティブ型は単一の値を表します。参照型は、0個以上のプリミティブ値またはオブジェクトを保持する型を集約します。
  4. プリミティブ型には、1〜8バイトのメモリが必要です。プリミティブ値が変数に格納されるか、メソッドに渡されると、コンピューターはバイトのコピーを作成し、値を保持します。一方、オブジェクトはより多くのメモリを必要とする場合があります。
0
Amir Amiri