这些参考文献是否真的相同?

Bar*_*tza 3 java

假设我们有以下代码片段:

Cat cat = new Cat(); // The Cat class extends Animal

ArrayList<Animal> animalList = new ArrayList<>();
animalList.add(cat);
Run Code Online (Sandbox Code Playgroud)
  1. catCat指向类型对象的类型的引用Cat

  2. animalList.get(0)是类型的引用Animal,指向与cat引用相同的对象.

  3. cat == animalList.get(0)将评估,true因为他们都指向同一个对象.

但是,一个引用是类型Cat而另一个是类型Animal(列表中的位置0),所以我错误地说引用不完全相等,即使它们指向相同的内存位置?我是否过多地研究术语?

Gho*_*ica 5

这个现有的答案使用围绕房屋的一个很好的类比,它将引用描述为"地址",允许您找到"房屋"(那些代表实例化的对象).

如果你扩展这种想法,你可以说可以在不同的卡上打印地址.所以这些卡看起来不同,但印在它们上的地址总是一样的.

所以是的,编译器对引用(或准确地说:**变量)有一定的了解是"不同的"(你不能在Animal引用上调用Cat方法).但在运行时,那部分完全消失了.然后我们只比较印在"卡片"上的"地址".