【发布时间】:2014-06-23 17:13:08
【问题描述】:
已经有一些类似的问题(例如Why Data type in java are not object?)但我还是不清楚。
这是objects从oracle's document的定义:
对象是相关状态和行为的软件包。
考虑:
int nnn = 3;
我认为nnn 具有int 类型和my value is 3 状态,尽管没有任何行为。为什么它不是一个对象?
然后看下面iii是一个对象:
Integer iii = new Integer(3);
我发现了一些其他解释,上面写着“对象是 Java 中某个类的实例”。 (对不起,我找不到我在哪里读的)
所以nnn的值在Java中不是对象,最重要的原因是它不是某个类的实例?
所以object在Java中的定义应该是:一个对象是一个包含相关状态和行为的软件包,而在Java中,它应该是某个类的一个实例。对吧?
更新:
感谢您回答我的问题。我发现我需要把这个问题说清楚,因为当人们评论“它不是一个对象,因为它没有行为”时,我发现很多人没有在 cmets 中通知我的解释。
我们知道Object 有一些内置方法,例如toString、equals 等。所以当我定义一个类时,说:
class User extends Object {
// empty body
}
User 的实例也会有这些方法(行为)。但是如果Object 没有提供所有这些方法呢?在这种情况下,new User()这里不会有任何方法(行为),那么我们不应该认为它是一个对象吗?
对不起各位,我现在真的很困惑:(
【问题讨论】:
-
[...] although has no behavior. Why it's not an object?你正在回答你自己的问题。 -
如果
Object没有提供内置方法,那么class User extends Object {}没有行为,那么new User也不是对象? -
User继承了Object的所有行为。 -
@Freewind Object 有很多方法,比如
user.getClass();user.toString(),user.hashCode(),synchronized(user)你不能用一个原语做任何这些事情。 -
Freewind 提出了一种假设情况,即您有一个名为
Object的类,但没有任何方法;如果你实例化它,它会突然有自己的行为吗? OP 可能会被继承注释弄糊涂。
标签: java class object integer primitive