【发布时间】:2019-03-15 11:03:32
【问题描述】:
假设我们有如下代码sn-p:
Cat cat = new Cat(); // The Cat class extends Animal
ArrayList<Animal> animalList = new ArrayList<>();
animalList.add(cat);
cat是Cat类型的引用,它指向Cat类型的对象animalList.get(0)是Animal类型的引用,它指向与 cat 引用相同的对象。cat == animalList.get(0)将评估为true,因为它们都指向同一个对象。
但是,一个引用是Cat 类型,另一个是Animal(列表中的位置0),所以我说这些引用不完全相等是错误的,即使它们指向相同的内存地点?我是否过多地研究术语?
【问题讨论】:
-
是同一个对象。但是如果 cat 有一个动物没有的方法 miaow() ,我认为编译器不会允许你编写 animalList.get(0).miaow() 因为在编译时它不知道里面有一只猫那个地方
-
在对象上使用
==是内存引用比较,实际上它们都指向同一个内存位置。另请参阅:覆盖equals()和hashCode()方法。
标签: java