对象在方法中传递时,仅仅传的是地址的副本-这句话需要深刻理解
public class MainActivity extends AppCompatActivity { Book book; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); book = new Book(); book.setA(1); test(book); Log.i("xbh", book.getA() + ""); } void test(Book book) { Book b = new Book(); book = b; Log.i("xbh", book.getA() + ""); } }比如说有个成员变量book,你把这个book传进test方法,实际上仅仅传进去的这个地址的拷贝。你根据这个拷贝的地址,确实可以找到一开始new的那个book对象并修改和操作他。但是如果你修改的是地址的话,比如book=b这个操作,你仅仅修改的是他地址的拷贝,而地址却没有变。这是因为传进去的仅仅是一个地址的拷贝。所以在执行完test方法后,输出的依然原来的值。
而如果你在test方法里,修改了这个引用,比如book.setA(6),那么原来的那个对象的值也会被改变。因为虽然你传进去的是地址的拷贝,但是你依然可以通过这个地址的 拷贝找到对象并进行修改。