Java中的int是一个对象吗?

13

更准确地说,int是Integer类的一部分(一个简化版或其他什么东西),还是完全不同的东西?

我知道int是值类型,而Integer是引用类型,但是int是否仍然继承自Object呢?

(我假设在这方面,int、long、boolean等都是相似的。只是为了方便选择int)

5个回答

22
  • Java中的基本类型不是对象,也没有继承自Object。

  • 自从Java 1.5引入了int和Integer(以及其他类型)之间的自动装箱,就可以使用它们之间的转换。

  • 因为int不是对象,所以不能用作泛型类型参数,例如list<T>中的T


17

"原始数据类型"中可以得知:"原始类型是内置到语言中的特殊数据类型;它们不是从类创建的对象。" 这也就意味着,int并没有以任何方式继承自java.lang.Object,因为只有"从类创建的对象"才会这样做。考虑以下代码:

int x = 5;

为使名为x的东西从Object继承,那个东西需要有一个类型。请注意,我区分x本身和它所命名的东西。 x 有一个类型,即int,但所命名的东西是值为5的内容,它本身没有类型。它仅仅是一系列代表整数值“5”的位序列。相比之下,请考虑:

java.lang.Number y = new java.lang.Integer(5);

在这种情况下,y的类型是Number,而命名为y的那个东西的类型是Integer。命名为y的那个东西是一个对象。它有一个独特的类型,与y或其他任何东西无关。


我有一个疑问 - 一个返回类型为“Object”的方法是否可以实际返回“int”?如果是,那么我如何在调用环境中从“Object”获取“int”? - Chesser
@KaranChadha 你应该将这个问题发布为一个新的问题,而不是一个评论。但是,请确保在发布之前先查看一下是否已经有相同的问题被提出过。 - Ryan Stewart

1

原始类型不是对象,但它们直接存储在需要它们的任何上下文中。如果需要将它们视为对象,则可以将其装箱为整数。


那么你的意思是对象=引用类型? - soandos
@soandos:是的。Java中的所有类实例都是引用类型。 - siride

1
如果你谈论整数:
Integer类将原始类型int的值封装在一个对象中。类型为Integer的对象包含一个类型为int的单个字段。
此外,该类提供了几种方法,用于将int转换为String和String转换为int,以及其他常量和方法,在处理int时非常有用。
int不是对象,而是一种原始类型。

那么它没有继承自object吗? - soandos
@soandos:它不继承自任何东西。它不能继承,因为原始类型不是引用类型。这与C#的简单类型类似。 - Hovercraft Full Of Eels
在其他编程语言中,结构体可以继承,因此仅仅因为它是一个原始类型并不足够。 - soandos
2
@soandos - 我不知道有哪种语言规范会将结构体称为原始类型。结构体类型是一种构造类型。但是,从一种语言的概念和术语推广到其他语言并不完全可靠。要真正理解一种语言,您需要了解它如何指定其术语。 - Stephen C
我有一个疑问 - 一个返回类型为Object的方法,能否实际返回int?如果可以,那么在调用环境中如何从Object中获取int - Chesser

-1
  1. 对象具有状态和行为
  2. 状态指字段(变量)
    例如:自行车(当前速度,当前档位)
  3. 行为指用于更改该字段的方法
    例如:使用方法更改当前速度
  4. 想象一下,如果您可以更改int的状态,那么您可以说int是一个对象。但我们无法更改它的状态,因此它不是一个对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接