哪个是对象,哪个是引用变量

时间:2010-10-13 04:29:07

标签: java

Dog d=new Dog();

在上面的对象中哪一行是参考变量?或对象和引用变量是否相同?

3 个答案:

答案 0 :(得分:6)

d是对Dog对象实例的引用。

对象实例和引用不一样;引用指向对象实例。

为了说明,你可以做到

 Dog d2 = d;

现在您有2个引用,dd2,它们指向Dog的相同基础实例。

现在,如果你这样做

d = new Dog();

d2指向您创建的第一只狗,d指向第二只狗(它最初指向第一只狗。)此语句创建一个新的对象实例,并将其分配给原始Dog参考。

答案 1 :(得分:0)

new Dog();

上述语句在堆中创建一个对象,该对象是Dog类的一个实例。如果上述声明本身(即没有“Dog d=”部分),则新对象将丢失,因为没有任何方法可以访问或“获取”它。 d指的是新创建的对象。您可以使用该引用来操作新对象。

答案 2 :(得分:0)

从表面上看,这似乎是一个简单的问题,但它可以很好地参与实际 的变量和对象的语义。

发明Java的公司Sun对Java变量概念有一个很好的介绍here;它是一个很棒的初学者级别系列的一部分,名为 The Java TM Tutorials 。在你的例子中,变量是d,因为这是你将用来引用有用的东西 - 即对象 - 以后的东西。换句话说,d将引用该对象。

因此,由于d是引用,new Dog()必须是对象,对吧?不完全的。你的代码行中没有任何对象。实际上,你从来没有真正“看到”代码中的对象,因为对象只是抽象概念(我再次指向the Java Tutorials page;对象与classes密切相关,但这开始是一个单独的所有new Dog()都告诉计算机运行一个构造函数,这就像一个创建对象的特殊方法。

计算机创建对象后,会看到等号并使d成为该对象的“名称标签”。 d,对象不一样; d更像是指向目标的箭头。您可以在下一行说Dog d2 = d;并为同一对象设置两个“名称标记”。或者,您可以再次说d = new Dog();,旧名称d将指向新对象。旧对象仍然存在,但它没有“名称标签”,因此您将无法再使用它。

我故意过度简化了一些事情,试图让变量/对象的区别更加清晰。如果您不清楚,请发表评论。