0

作为我的 AP 课程的一部分,我正在学习对象、实例、引用等......所以据我所知,引用是一个指向某物的变量:一个值、类等。. . 因此,说对象是对类的引用是否合法?

注意:我知道这是主观的,但我似乎无法在其他任何地方找到这样的比较。

4

7 回答 7

3

按照通常的参考定义,你不能这么说。正确的是“一个对象是一个类的一个实例。”。

引用的通常定义是指向通常被某个对象占用的内存位置的值。指针和引用之间的区别在于您可以对前者进行指针运算,但不能对后者进行。

例如在以下代码片段中:

SomeClass o = new SomeClass();
SomeClass foo = o;

SomeClass是类,并且是对该关键字的特定调用返回o的实例的引用。为 的新实例分配内存并调用其构造函数对其进行初始化。是对同样由.引用的实例的另一个引用。换句话说,和指向同一个对象但不是同一个引用。SomeClassnewnew SomeClass()SomeClassfooSomeClassoofoo

于 2013-09-29T00:33:45.550 回答
2

对象不是类的引用,而是类的实例。

于 2013-09-29T00:35:42.067 回答
1

正如其他人所说,一个类就像一个蓝图。当您基于类创建对象时,计算机通过分配内存来“构建”一个对象,以基于您的类创建“部分”(变量)。

因此,该对象不是对类的引用,这意味着该对象只是将您重定向到该类。

对象是类的一个实例。

于 2013-09-29T01:33:55.907 回答
1

不,这不是一个有效的陈述。一个对象是一个类的实例,而不是一个类的引用。当你有类似的东西时:

MyClass var = new MyClass();

然后var是对MyClass分配给它的实例的引用 ( new MyClass())。这个实例又是一个对象

JLS §4.3.1

对象是类实例或数组。

引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象。

于 2013-09-29T00:33:59.420 回答
0
Object foo = new Object();

foo是对类的特定具体实例的引用,Object而不是对类本身的引用。

Class bar = Object.class;

bar是对Object类的引用。

于 2013-09-29T00:39:02.593 回答
0

对象实际上是类的一个实例。假设我们有 String 类。String 类型的对象是String 类的实例,而不是该类本身。给定String s="foo",s的值将是对 String 类实例的引用。

现在,每个类都有一个java.lang.Class与之关联的对象,String.class对 java.lang.Class 实例的引用也是如此。

来自 JLS:

对象是类实例或数组。

引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它不引用任何对象。

于 2013-09-29T00:34:06.263 回答
0

不,这就像说你今天早上吃的炒鸡蛋是对炒鸡蛋的抽象概念的引用。

请记住,aclass是一个蓝图,但它本身并不是一个实际的具体对象。只有当您通过new关键字实例化对象时才会发生这种情况。

于 2013-09-29T00:35:24.353 回答