接下来了解堆上的生:
Book b = new Book();
Book c = new Book();
声明两个Book的引用变量并创建两个Book对象,然后将Book对象赋值给引用变量。现在这两个Book对象生活在堆上
此时:
引用数:2
对象数:2
Book d = c;
声明新的Book引用变量,但不创建新的Book对象而将变量c的值赋值给变量d。这代表“将c的字节组合拷贝给变量d”。
此时:
引用数:3
对象数:2
c与d引用到同一个对象。相同值得两份拷贝(一台电视机两个遥控器)。
c=b;
把变量b的值赋给变量c。现在知道这代表什么了。变量b的字节组合被拷贝一份给了c。
此时:
引用数:3
对象数:2
b和c两者都引用了相同的对象。
重点关注红色的框框内:
好的,再看堆上的死:
Book b = new Book();
Book c = new Book();
声明两个Book的引用变量并创建两个Book对象,然后将Book对象赋值给引用变量。现在这两个Book对象生活在堆上
此时:
引用数:2
对象数:2
b = c;
把变量c的值赋给变量b。两者带有相同的值。
对象1被抛弃且能够作垃圾收集器(GC);
此时:
引用数:2
对象数:2
被抛弃的对象数:1
对象1已经没有引用,变成无法存取的了。
c = null;
将null赋值给c。这代表它不再引用任何事物,但还是个可以被指定引用其他Book的引用变量。
对象2还引用到,所以不能够作垃圾收集器(GC)。
此时:
作用中的引用数:1
null的引用数:1
可存取对象数:1
被抛弃对象数:1
创建Dog数组
声明一个Dog数组变量:
Dog [] pets;
创建大小为7的Dog数组,并赋值给前面所声明的Dog[]类型变量pets:
pets = new Dog [7];
大家有没有发现少了什么?我们虽然有了Dog的引用,但是缺少实际的Dog对象!
pets [0] = new Dog();
pets [1] = new Dog();
Java注重类型:一旦数组被声明出来,你就只能装入声明类型的元素(编译器会根据数组所声明的类型来防止错误)!
Java编程基础知识——引用
最新推荐文章于 2025-02-19 18:42:09 发布