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

关于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值