Dog d=new Dog();
在上面的对象中哪一行是参考变量?或对象和引用变量是否相同?
答案 0 :(得分:6)
d
是对Dog
对象实例的引用。
对象实例和引用不一样;引用指向对象实例。
为了说明,你可以做到
Dog d2 = d;
现在您有2个引用,d
和d2
,它们指向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
将指向新对象。旧对象仍然存在,但它没有“名称标签”,因此您将无法再使用它。
我故意过度简化了一些事情,试图让变量/对象的区别更加清晰。如果您不清楚,请发表评论。