java的本身实质还是传质的。这个是不变的,呵呵。那个传引用之说,其实是传引用之值也就是那个对象的地址值(归根结底还是传值)。
首先你将book的值赋值为null,然后再调用p.bookxiugai(book)方法,这个时候就是把book中的null复制一份到p.bookxiugai(book)这个局部的book变量中,
然后你再在方法内部对book这个局部变量进行赋值(book = new Book()),当方法退出时这个局部变量也就不存在了,而外部的那个book变量的值一直都是null值.
就是你现在的结果。
如果开始在外面 book= new Book();就先进行赋值了,再调用p.bookxiugai(book)时,这个时候也是把book中的值(现在是new的那个对象的地址值了,也就是一个地址,也就是说的引用)复制一份到p.bookxiugai(book)这个局部的book变量中些时如果在方法内部使用book对象去调用它的方法,那么就是通过那个引用的地址去使用那些东西。也就是我们平常所看到的那样,如果我们再在方法内部使用book = new Book(),那么这个局部变量又指向另一块内存了,但外面的那个book仍然还是没有变,还是指向原来的那个book对象。所以就是这样,这样理解就一切没有冲突了哈。你也可以自己编程测试一下。 |