类和类型之间的区别

2022-08-31 08:36:11

作为Java的新手,我对类型的概念感到困惑。例如,对象应该属于类型还是?或者两者兼而有之?"Hello World!"StringString


答案 1

类是一种类型。接口是一种类型。基元是一种类型。数组是一种类型。

因此,每个类型也是一个类(包括枚举常量)、一个接口、一个基元或一个数组。

有两种不同的类型类别:基元类型和引用类型:

  • 基元类型的变量始终保存相同类型的基元值。这样的值只能通过对该变量的赋值操作来更改。
  • 引用类型的变量始终保存对对象的引用的值。所有对象(包括数组)都支持类 的方法。引用类型包括类类型(包括枚举类型)、接口类型和数组类型。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


答案 2

TLDR - 类是Java中的类型之一。

注意 - 要完全理解答案,您必须对Java中的泛型有一点了解。


要了解这种差异,让我们首先了解Java中的Type是什么。

根据 JLS SE 10

Java 编程语言中有两种类型基元类型§4.2) 和引用类型 (§4.3)。

什么是基元类型?

a) 整数类型为字节、短整型、整型和长整型,其值分别为 8 位、16 位、32 位和 64 位有符号二进制补码整数,以及 char,其值是表示 UTF-16 代码单位的 16 位无符号整数 (§3.1)。

b) 浮点类型为浮点数(其值包括 32 位 IEEE 754 浮点数)和双精度型(其值包括 64 位 IEEE 754 浮点数)。

c) 布尔类型正好有两个值:true 和 false。

现在,让我们来看看什么是引用类型?

有四种类型的引用类型:类类型§8.1)、接口类型§9.1)、类型变量§4.4) 和数组类型§10.1)。

让我们一一讨论。

如果你在JLS中看到,是这样定义的:

类声明指定新的命名引用类型。

有两种类型的类声明:普通类声明和枚举声明

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

    } 
}

您会看到方法参数中的对象类型为 。是的,这是类型变量,是/可以用作参考。是的,它是。(无法理解这个奇怪的例子 - 学习Java中的通用方法)TT

这样就完成了答案。