web-dev-qa-db-ja.com

クラスとタイプの違い

Javaが初めてなので、classtypeの概念が混同されています。たとえば、オブジェクト"Hello World!"typeに属するStringまたはclassString?それとも両方?

98
user2236096

クラスはタイプです。インターフェイスはタイプです。プリミティブは型です。配列は型です。

したがって、すべての型は、クラス(enum定数を含む)、インターフェイス、プリミティブ、または配列でもあります。

型には、プリミティブ型と参照型の2つの異なるカテゴリがあります。

  • プリミティブ型の変数は、常に同じタイプのプリミティブ値を保持します。このような値は、その変数に対する割り当て操作によってのみ変更できます。
  • 参照型の変数は、常にオブジェクトへの参照の値を保持します。配列を含むすべてのオブジェクトは、クラスObjectのメソッドをサポートします。参照型は、クラス型(列挙型を含む)、インターフェース型、および配列型です。

すべてのデータには、その構造を定義する型があります。つまり、どのくらいのメモリを使用するか、どのようにレイアウトするか、さらに重要なことには、どのようにデータとやり取りするかです。

プリミティブ型の例:

  1. int
  2. float
  3. char
  4. boolean

クラスタイプの例:

  1. String
  2. Integer
  3. Boolean
  4. ArrayList
  5. StringBuilder

インターフェイスタイプの例:

  1. Collection
  2. List
  3. Map
  4. Serializable

配列型の例:

  1. int[]
  2. String[]
  3. Integer[][][]

基本的に、変数として参照できるものはすべて型を持ち、クラスは一種の型です。

詳細はこちら: http://docs.Oracle.com/javase/specs/jls/se8/html/jls-4.html

117
Brandon

[〜#〜] tldr [〜#〜]-クラスはJavaのタイプの1つです。

注-答えを完全に理解するには、Javaのジェネリックに関する少しの知識が必要です。


違いを理解するために、まずJavaでTypeが何であるかを理解しましょう。

JLS SE 1 に従って

Javaプログラミング言語:primitive types(---)には、2種類のtypesがあります。 §4.2 )および参照タイプ(§4.3)。

プリミティブ型とは何ですか?

a)整数型はbyte、short、int、およびlongであり、その値は8ビット、16ビット、32ビット、および64ビットの符号付き2の補数整数です。 、およびchar、値は、UTF-16コード単位を表す16ビットの符号なし整数です(§3.1)。

b)浮動小数点型はfloatで、その値には32ビットIEEE 754浮動小数点数が含まれ、double 、その値には64ビットIEEE 754浮動小数点数が含まれます。

c)booleanタイプには、trueとfalseの2つの値があります。

さて、参照型とは何でしょうか?

4種類の参照タイプがあります:クラスタイプ§8.1 )、インターフェイスタイプ(- §9.1 )、type variables§4.4 )、およびarray types§10.1 )。

ひとつひとつ話し合いましょう。

JLSでの方法を見ると、Classは次のように定義されています。

class宣言は、新しい名前付き参照型を指定します。

クラス宣言には、通常のクラス宣言と列挙型宣言の2種類があります。

ClassDeclaration:
NormalClassDeclaration 
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody

[TypeParameters]、これは、クラス型にこれらの汎用クラスも含まれることを示しています。

class Example<T>{

}

クラスタイプはExampleと呼ばれます

要するに、クラス型は列挙型、Stringなどの通常の(非ジェネリック)クラス、そしてジェネリッククラスもカバーします。

同様に、インターフェイスと配列のタイプも明確であることを願っています。配列タイプでは、int[]String[]など.

最後の部分-型変数に進みましょう。彼らは何ですか ?

型変数は、クラス、インターフェイス、メソッド、およびコンストラクターの本体で型として使用される非修飾識別子です。

下のJLSの例で理解してみましょう。

class Test {
    <T extends C & I> void test(T t) {  
        t.mI();           // OK
        t.mCPublic();     // OK 
        t.mCProtected();  // OK 
        t.mCPackage();    // OK

    } 
}

MethodパラメーターのオブジェクトがT型であることがわかります。はい、このTはType変数であり、参照として使用できます。はい、そうです。 (この奇妙な例を理解できませんでした-Javaの汎用メソッドとは何ですか)

これで答えは完成です。

5

「タイプ」はより包括的なカテゴリです。 Javaの変数は3種類の型を持つことができます:intやfloatなどの8つの「プリミティブ」型、インターフェース、クラス。変数ではなく値はプリミティブまたはクラスインスタンスです。

4

「タイプ」は「データのタイプ」を定義します

例:「hello world」は文字列->「hello world」は文字列型です(文字列はint ..とは異なり、premetiveデータではないため、「hello world」は文字列クラス型です)

10はintです-> 10は整数データ型です。

2
Satya