ArrayList存储对象时,内部存储的是对象的索引!!!
索引内的值变了,但是索引不会变。
演示
先建立一个对象
class Car{
private String wheelsName;
private String carName;
@Override
public String toString() {
return "car [wheelsName=" + wheelsName + ", carName=" + carName + "]";
}
public Car(String wheelsName, String carName) {
super();
this.wheelsName = wheelsName;
this.carName = carName;
}
public Car() {
super();
}
public String getWheelsName() {
return wheelsName;
}
public void setWheelsName(String wheelsName) {
this.wheelsName = wheelsName;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
}
main方法
public class Main {
public static void main(String[] args) {
//当声明对象在循环外部时候
Car cars = new Car();
List<Car> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
cars.setCarName("序号"+i);
cars.setWheelsName("序号"+i);
list.add(cars);
}
System.out.println(list.toString());
}
}
本来按理说是list内每个car的值都不一样,但是所有值都是一样的
[car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9], car [wheelsName=序号9, carName=序号9]]
在来看所有值的引用
[test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742, test.Car@15db9742]
发现都一样。。。。。这就证实存储对象时,保存的都是索引
那么存储基本数据类型呢?
答案是直接指向值所在的位置
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list.toString());
}
}
输出如下
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]