整数不是Java中的对象,只是因为它们不是类的实例?

时间:2014-06-23 17:13:09

标签: java class object integer primitive

已经有一些类似的问题(例如Why Data type in java are not object?),但我仍然不清楚。

这是oracle's documentobjects的定义:

  

对象是相关状态和行为的软件包。

考虑:

int nnn = 3;

我认为nnn的类型为int,状态为my value is 3,但没有行为。为什么它不是一个对象?

然后查看以下iii对象:

Integer iii = new Integer(3);

我发现了一些其他的解释,说“对象是Java中某些类的实例”。 (对不起,我找不到我读到的地方)

因此值nnn不是Java中的对象,最重要的原因是它不是某个类的实例?

因此,Java中object的定义应该是:对象是相关状态和行为的软件包,在Java中,它应该是某个类的实例。正确?


更新

感谢您回答我的问题。我发现我需要明确这个问题,因为我发现许多人在评论中没有通知我的解释,当人们评论“它不是一个对象,因为它没有行为”。

我们知道Object有一些内置方法,例如toStringequals等。所以当我定义一个类时,请说:

class User extends Object {
  // empty body
}

User的实例也会有这些方法(行为)。但是如果Object没有提供所有这些方法呢?在这种情况下,new User()这里没有任何方法(行为),那么我们不应该认为它是一个对象吗?

抱歉,伙计们,我现在真的很困惑:(

4 个答案:

答案 0 :(得分:1)

来自Java Language Specification. Chapter 4. Types, Values, and Variables.

  

4.1。类型和价值的种类

     

Java编程语言中有两种类型:基本类型(§4.2)和引用类型(§4.3)。相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作:原始值(§4.2)和参考值(§4.3)。 / p>      

4.2。原始类型和值

     

原始类型由Java编程语言预定义,并以其保留关键字(§3.9)命名:

     

PrimitiveType

     

{Annotation} NumericType
   {Annotation}布尔

     

NumericType

     

IntegralType
  FloatingPointType

     

IntegralType
  byte short int long char

     

FloatingPointType
  float double

     

4.3。参考类型和值

     

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

     

4.3.1。对象

     

对象是类实例或数组   引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它指的是没有对象。

因此,对象基本上是一个不是原始类型的变量。基本类型是:byte,short,int,long,char,float,double和boolean。您不应该将这些原始类型与其类包装器混淆:Byte,Short,Integer,Long,Character,Float,Double和Boolean。

如果Object类根本没有定义任何方法,那么创建一个没有方法的类根本就没有任何行为,但是在Java中,通过对象的定义,或更好的术语:参考值,是一个引用类或数组实例的变量,它基本上是任何非基本类型。请注意,参考值可能不需要任何行为 ,行为在中定义,参考值可以使用或不使用。

答案 1 :(得分:0)

您展示的示例是引用类型与基本类型。还有一些其他内容,例如charCharacterLonglong

这些基元的类变体包含方法,字段和其他标准类组件。另一方面,原语只是价值。例如,如果我想要一个数字的字符串表示。

3没有方法。它的价值。但是,类Integer具有toString方法,可以打印其值。通过创建值为3(Integer)的new Integer(3)实例,您可以创建一个类并填充其中一个字段。

这有自己的用途,用int键入参数或变量也是如此。这只是告诉解释器该值是某种类型。

答案 2 :(得分:0)

对象就像是类的快照。所以它可以随时间变化。换句话说,它可以在状态上变化并且可以在不同状态下表现不同。对象也可以容纳其他对象。在您的示例中,nnn具有状态,但它不显示任何行为

答案 3 :(得分:0)

Java背后的逻辑非常简单。可以将对象称为类的实例,该类是从其层次结构中的java.lang.Object类派生的。

如果是char int或long等原语,则不会继承继承。

这样做的结果是,在任何java对象上,您都可以调用方法toString()。这背后的关键是你告诉一个对象执行一些动作。你无法告诉原始人做某事。

但是,对象的概念并不是由任何语言定义的。这更像是范式方面。