johnnyv_cn
发贴: 1
积分: 0
|
于 2005-10-20 21:53
class A{ int amount = 0; } class B{ //拿到A的实例a的地址。把地址烧了,绝交。并没有把a杀死。 public static void setNull(A a) { a = null; } //拿到A的实例a的地址;按照地址找到了a;赏了a一个大洋。 public static void setAmount(A a) { a.amount = 1; } public static void main(String[] args){ A a = new A(); setNull(a); System.out.println(a.amount); // 0 setAmount(a); System.out.println(a.amount); // 1 } } 通过new产生的对象本身是放在堆(heap)上的;a放在堆栈(stack)中,是对堆上的a对象的引用,并不是对象本身。setNull(a)中的a是该引用的值的拷贝(所谓的“按值传递”),并不是a对象本身。可以销毁该引用的值的拷贝,也可以通过该拷贝去调用对象的方法,从而改变对象的状态,但不能通过该拷贝销毁对象本身。
johnnyv_cn edited on 2005-10-23 09:17
|