面向对象基础入门6(方法的传参机制)

如果定义方法时候声明了形参,调用方法是必须传入对应的参数。

引例:

  1. public class Transfer {
  2. public static void swap(int a,int b)
  3. {
  4. int tmp=a;
  5. a=b;
  6. b=tmp;
  7. }
  8. public static void main(String[] args) {
  9. int a=6,b=9;
  10. Transfer.swap(a,b);
  11. System.out.println(a+" "+b);
  12. }
  13. }
  14. /*
  15. 6 9
  16. */

swap方法的本意是交换ab的值,但调用后并未实现功能

因为传入方法swap的仅仅是ab的副本,并不是参数本身

所以,如果传递到参数是基本类型,方法中对参数所做的修改,完全不会影响参数本身

  1. public class Transfer {
  2. public static void swap(DataWrap dw) {
  3. int tmp = dw.a;
  4. dw.a = dw.b;
  5. dw.b = tmp;
  6. }
  7. public static void main(String[] args) {
  8. DataWrap dw = new DataWrap();
  9. dw.a = 6;
  10. dw.b = 9;
  11. //传入参数是引用类型
  12. Transfer.swap(dw);
  13. System.out.println(dw.a + " " + dw.b);
  14. }
  15. }
  16. class DataWrap {
  17. int a;
  18. int b;
  19. }

此时传递的是引用类型的变量dwmain栈中

main方法中创建了一个新对象在堆内存中,dw指向了对象中的变量ab

swap栈也指向了堆内存中的ab,包含的并不是对象本身,而是变量的首地址

面向对象基础5(方法的传参机制) - 图1

所以,如果传递的对象是引用类型,参数副本与参数本身指向的是同一个对象,

因此方法通过参数副本修改对象时,会影响参数本身所指向的对象