类和类型之间的区别


105

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


24
最近似乎倾向于否决任何“初学者”风格的问题,无论它们是否好。至少可以说,这很烦人。
nico_c

9
也要否决选民不理解的任何问题……
洛恩侯爵(Marquis of Lorne)

4
我同意您说初学者的问题时不赞成投票是不礼貌的,但是无论是好是坏,所有初学者的问题都是通过搜索网络获得答案的。问题和人们不赞成的原因是因为这导致堆栈溢出:)
MarkoLazić13年

13
这是一个很大的问题-要结束投票的3票是为什么我们需要能够投票才能保持开放。我仍然记得当我学习Java时,OO术语是最大的障碍。
劳伦斯·多尔

4
@nickecarlo常见问题解答中曾经有一个观点,它似乎是在过去一年左右的时间里提出的:“这个问题表明严重缺乏研究,没有迹象表明在提出问题之前已经做出努力来解决该问题。 ”。我感到烦恼的是,Google可以解决很多废话问题,而不是这里的人们实际上是在浪费时间向其他人解释“编程101”。
TC1

Answers:


123

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

因此,每种类型都是类(包括枚举常量),接口,基元或数组。

类型分为两种:基本类型和引用类型:

  • 原始类型的变量始终拥有相同类型的原始值。只能通过对该变量进行赋值操作来更改该值。
  • 引用类型的变量始终保存对对象的引用值。所有对象(包括数组)都支持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


6
不要忘记数组。
Paul Bellora

1
我不会自己进行编辑,因为我不确定那不是您要编写的内容,但是说类是“一种类型”而不是“一种类型” 可能会更好。
CVn

@MichaelKjörling是的,这是一个更好的说法。我会更新。
布兰登

3
您忘记了空类型(请参阅JLS 4.1)。
user1803551 2014年

1
@AndyDong抽象类仍然是一个类。
布兰登

6

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

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


要了解差异,让我们首先了解Java中的类型

根据JLS SE 10

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

什么是原始类型?

a)整数类型为byte,short,int和long,其值分别为8位,16位,32位和64位带符号的二进制补码整数,以及char,其值为16位表示UTF-16代码单元(第3.1节)的无符号整数。

b)浮点类型是float,其值包括32位IEEE 754浮点数,以及double,其值包括64位IEEE 754浮点数。

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是Type变量,可以用作参考。是的。(无法理解这个奇怪的示例-了解Java中的通用方法)

这样就完成了答案。


4

“类型”是更具包容性的类别。Java中的变量可以具有三种类型:8个“原始”类型,例如int和float,接口和类。值(与变量相对)可以是原始实例或类实例。


2

“类型”定义“它是什么数据类型”

例如:“ hello world”是一个字符串->“ hello world”是一个字符串类型(与int ..不同,String不是先验数据,所以我们可以说“ hello world”是一个字符串类类型)

10是一个int-> 10是一个整数数据类型。


5
由于在Java中Integer!= int,因此请谨慎使用整数来解释int。
nico_c
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.