[java] 클래스와 유형의 차이점

Java를 처음 접하기 때문에 classtype 의 개념이 혼동 됩니다. 예를 들어, 객체 "Hello World!"유형 String 또는 클래스에 속해야 String합니까? 아니면 둘 다?



답변

클래스는 유형입니다. 인터페이스는 유형입니다. 프리미티브는 유형입니다. 배열은 유형입니다.

따라서 모든 유형은 클래스 (열거 형 상수 포함), 인터페이스, 프리미티브 또는 배열이기도합니다.

유형에는 기본 유형과 참조 유형의 두 가지 유형이 있습니다.

  • 기본 유형의 변수는 항상 동일한 유형의 기본 값을 보유합니다. 이러한 값은 해당 변수에 대한 할당 작업을 통해서만 변경할 수 있습니다.
  • 참조 유형의 변수는 항상 객체에 대한 참조 값을 보유합니다. 배열을 포함한 모든 객체는 class의 메소드를 지원합니다 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


답변

TLDR- 클래스는 Java의 유형 중 하나입니다.

주-답을 완전히 이해하려면 Java의 제네릭에 대한 약간의 아이디어가 있어야합니다.


차이점을 이해하기 위해 먼저 Java에서 유형 이 무엇인지 이해합시다 .

JLS SE 10 에 따르면 ,

Java 프로그래밍 언어에는
기본 유형 ( §4.2 )과 참조 유형 ( §4.3 ) 의 두 가지 유형이 있습니다 .

원시 유형이란 무엇입니까?

a) 정수 유형은 byte, short, int 및 long 이며 값은 각각 8 비트, 16 비트, 32 비트 및 64 비트 부호있는 2의 보수 정수 이고 값이 16 비트 인 char UTF-16 코드 단위를 나타내는 부호없는 정수 (§3.1).

b) 부동 소수점 유형은 값이 32 비트 IEEE 754 부동 소수점 숫자를 포함하는 float 및 값이 64 비트 IEEE 754 부동 소수점 숫자를 포함하는 double 입니다.

c) 부울 유형에는 정확히 두 가지 값, 즉 true와 false가 있습니다.

이제 참조 유형이란 무엇입니까?

참조 유형에는 클래스 유형 ( §8.1 ), 인터페이스 유형 ( §9.1 ), 유형 변수 ( §4.4 ) 및 배열 유형 ( §10.1 )의 가지 종류가 있습니다 .

하나씩 논의합시다.

JLS에서 어떻게 보면 Class 는 다음과 같이 정의됩니다.

클래스 선언은 새로운 지정된 참조 유형을 지정합니다.

클래스 선언에는 일반 클래스 선언과 열거 형 선언 의 두 가지 종류가 있습니다 .

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

당신은 그 참조 [TypeParameters]클래스 형식도 그 일반적인 클래스를 포함,이 쇼를.

class Example<T>{

}

클래스 유형이 호출됩니다. Example

간단히 말해서, 클래스 유형은 열거 형, 일반 (일반이 아닌) 클래스, Stringetc와 같은 일반 클래스도 포함합니다.

마찬가지로 인터페이스 및 배열 유형도 명확하기를 바랍니다. 배열 형식으로 우리는 같은 의미 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유형 변수이며 참조로 사용할 수 있습니다. 네, 그렇습니다. (이 이상한 예를 이해할 수 없습니다-Java의 일반 메소드가 무엇인지 알아보십시오)

이것으로 답이 완성되었습니다.


답변

“유형”은 더 포괄적 인 범주입니다. Java의 변수는 세 가지 유형을 가질 수 있습니다. int 및 float, 인터페이스 및 클래스와 같은 8 개의 “기본”유형입니다. 값 (변수와 반대)은 기본 또는 클래스 인스턴스 일 수 있습니다.


답변

“유형”은 ‘데이터 유형’을 정의합니다.

예 : “hello world”는 문자열입니다.-> “hello world”는 문자열 유형입니다.

10은 정수-> 10은 정수 데이터 유형입니다.


답변