ddkkkl\
ddkkkl\
new出来的对象都存放在堆里的
类变量2=类变量1
这种类变量赋值给类变量其实是内存地址赋值,并不是参数赋值(原本类变量2的内存地址与类变量1的内存地址不一致,通过类变量赋值给类变量实际上是赋值了类变量1在栈内的内存地址给类变量2)所以此时更改类变量1或类变量2的参数时,由于两个变量指向同一个堆的内存地址,所以此时类变量1与类变量2的参数都会变更。
GC(垃圾回收)
每一个对象都会被一个变量所引用的,GC对于每一个对象都会有一个计数器表示栈内有几个类变量在引用该对象,每个对象GC都会给它持有一个计数器,堆区内的GC每隔一段时间会检查所有的对象,看那些对象的计数器是否为0。在该对象的计数器为0时会回收该对象所占用的内存区域给回收掉,供新的对象使用。
如何把这个引用给他去掉呢?
类变量=null;
这种情况下可以把该类变量在栈区内的内存地址清空。同时该类变量指向堆区的内存地址计数器-1。
null//空 空引用 空对象
栈和堆
对象引用
将一个类赋值给一个新定义的类
Customer c2= c1;
but这样有一个bug,因为c1、c2的地址相同,修改了他们任何一个彼此都会改变
c1=null;
c1的地址会清空,c1原来的地址所指向的内容如果没有对象在引用的情况下,系统会自动释放空间
Customer c1=new Customer{"张三",15,170};
Customer c2=c1;\\此时是吧c1的地址赋值给c2