java 指针被严格管理不能任意操作指针, 只能通过指针访问对象, 或者对指针之间赋值, 这很好保证 java 对象不受意外破坏和保证了安全性, java 称这种指针为引用, 引用和指针本质上相同的.
A a; 是创建了一个指针的变量, 这时没有创建 A 的对象, 指针变量的大小和一个整数是类似的.
a = new A(); 首先执行等号的右半边 new A(), 根据 A 定义的 class 模板创建了 a 对象, 这个对象是 A 类型的, 对象要占用了一定的内存空间, 占空间多少与我们 A 类所写的代码内容有关. 对象所占用的内存是一片连续的内存空间, 假设对象占用这片空间连续地址的开始地址是 1, 这称为对象的首地址.
对象占用多少连续空间拥有多少地址与类的定义有关. 我们记录一个对象的地址也仅记录这个对象所占用一片连续空间的首地址, 对象创建完后将首地址放到 a 的指针变量中.
a 不是对象仅仅是一个指针类型的小变量, 装的内容是对象的首地址, 是对象在内存中的位置信息, 由 a 变量我们就可以找到内存中的对象. 将来可以通过 a 操作真正的对象.
所有指针类型的小变量都是一样的, 无论对象多大指向这个对象的指针也是一样的大小.
A a = new A();
A b = new A();
a = b;
a=b 是对指针进行操作, 实际是把 b 所指向的地址复制到 a 中, 那 a 中原本的地址就丢失了, a 指向了一个新的对象, a 和 b 也就指向了一同一个对象, 那么原来 a 指向的对象就失去了引用, 也就是我们所说的垃圾对象. 这种赋值动作并没有改变对象仅仅是修改了指针的值.
一个指针只能指向一个对象或不指向对象, 不指向对象值就是 null, 一个对象允许有 0 个或多个指针指向它.
一个对象如果没有任何指针指向它, 这个对象就称为垃圾对象, 因为 java 只能通过指针才能访问对象, 没有指针指向的对象将无法使用无法访问, 在将来将被 java 的内存回收机制给回收掉.
来源: http://blog.csdn.net/weixin_39800712/article/details/79219447