JAVA基础知识回顾之---方法中的参数传递

来源:互联网 发布:阿里云ecs远程桌面 编辑:程序博客网 时间:2024/06/08 05:07
关于JAVA中方法的参数传递,到底是传递的地址还是引用的值,这个困惑了笔者很久,现在总算弄明白了,
首先,对于基本数据类型,传递参数时作为形参,传递的肯定是引用值,纠结的就在于引用数据类型 

首先来看看,数组作为参数传递时,传递的到底是地址还是值,这个笔者开始真心没弄明白,就是JAVA基础知识不够牢固。

首先我们来看下面的代码:

public static void testArray(int[] a){          for(int i = 0;i<a.length;i++){               a[i] = 1;          }          System.out.println("In the method:");          for(int i = 0;i<a.length;i++){               System.out.print("  "+a[i]);          }    }     public static void main(String[] args) {          int[] a = {2,3,4,5};          System.out.println("Before the method...");          for(int i =0 ;i<a.length;i++){               System.out.print("  "+a[i]);          }          System.out.println();          Operator.testArray(a);          System.out.println();          System.out.println("After the method...");          for(int i =0 ;i<a.length;i++){               System.out.print("  "+a[i]);          }     }


这三个位置分别在数组作为参数传递之前、方法中、方法后进行了输出,下面是得到的结果:
Before the method...
  2  3  4  5
In the method:
  1  1  1  1
After the method...
  1  1  1  1


     从上面的输出结果可以看出,数组作为参数传递的时候传递的是引用地址而不是值,所以当在方法中修改了其中的值之后,对应地址的值也会跟着改变,所以输出的就是修改之后的值。


     2、到了这里,笔者又思考一个问题,是不是对象作为参数传递时都是传递的地址呢,来看下面的代码:
   
  public static void testObject(Person person){          person.setName("11");          person.setNumebr(123);     }Person p = new Person();          p.setName("22");          p.setNumebr(456);          System.out.println("Before:"+p.getName()+" "+p.getNumebr());                   Operator.testObject(p);          System.out.println("After:"+p.getName()+" "+p.getNumebr());



下面来看输出结果:
Before:22 456
After:11 123

从上面的输出可以看出,对象作为参数传递时,传递的也是地址


3、最后,再来看看对象数组作为参数传递时传递的是什么

来看下面的代码:
public static void testListObject(List<Person> persons){for(Person person : persons){person.setName("zhangsan");person.setNumebr(000);}}

List<Person> persons = new ArrayList<Person>();persons.add(new Person("1",123));persons.add(new Person("2",456));persons.add(new Person("3",789));persons.add(new Person("4",012));System.out.println("Before...");for(Person person : persons){System.out.println(person.getName()+"  "+person.getNumebr());}System.out.println();Operator.testListObject(persons);System.out.println("After...");for(Person person : persons){System.out.println(person.getName()+"  "+person.getNumebr());}


下面来看输出结果:
Before...
1  123
2  456
3  789
4  10


After...
zhangsan  0
zhangsan  0
zhangsan  0
zhangsan  0

从上面的结果可看出,对象数组作为形参传递时也是传递的地址.
0 0
原创粉丝点击