假设有一个类 class A;有一个集合List<A> list;集合里面存放了很多A;
这时新建了一个A a = list.get(5);这个a和list.get(5)是同一个对象吗?
Objects.checkIndex(index, size);
return elementData(index);
} return (E) elementData[index];
}综上可以发现,get方法实际上就是数组的获取指定位置索引的数据信息;由于集合内只能放对象,不能放基本类型,所以里面存储的都是引用类型;且没有任何new 新对象的操作,故是一样的;
get(position)是按照list中元素的索引进行取值的,如果取得是同一个position的值 当然两个对象是相等的
在java中返回的都是对象的地址,而不是对象整体
这就好比
Object o1 = new Object();
Object o2 = o1;
此时要问,o1和o2的内存地址是不是一样的。
首先,o1、o2并不是对象,只是变量,它们共同指向了创建出来的Object对象。
它们表示的是同一个对象。
其次,hashcode方法返回的并不是对象的地址,它返回的是对象的散列码,查看Object类的hashcode方法注释可以知道,hashcode的最典型的实现
就是通过地址转化成一个int类型的值,所以开发者可以通过hashcode判断两个对象的内存地址是不是相等,而不能把hashcode就当成对象的内存地址。
不过这并不是唯一的实现方式,开发者也可以自己重写这个方法。
对象的地址是可变的,在java中存在垃圾回收策略,对象会从内存的一个区域移动到另外一个区域,比如从新生代移动到老年代。