java的参数传递

1.传递基本数据类型

传递值

所以调用完change(a)函数后

change(char newA)方法里的a 作用域 仅限于 该方法内

main中的a的值不变

 public static void main(String[] args) {
          char a='a';
          change(a);
          System.out.println("a = " + a);
      }

          public static void change(char newA) {
            newA='b';
         }

 

2.传递对象

1.不操作引用地址

参数类型是Person , 所以传递的是一个引用地址

change(Person p2)方法中, 接收到了一个引用参数,这个引用地址指向对象在堆里的地址。

所以p2.age++ 是对原对象操作,所以对main函数中的值有影响

 

举个例子, 小明的身份证号是 12X,

传递的参数可以认为是 12X ,  因为12X就表示小明

现在对身份证号是 12X的人进行 信息录入处理, 在家里(main)大家都觉得小明(12X)的年龄是2 

家里人把小明(12X),带到了派出所(change),  派出所(change)给小明(12X)的年龄加了一岁(p2.age++)

所以回到家后小明(12X)的最终年龄是3

 

public class Reference {
      public static void main(String[] args) {
          Person p1 = new Person();
          p1.age=2;
          change(p1);
          System.out.println("p1.age = " + p1.age);
      }
      public static void change(Person p2) {
         p2.age++;
     }
 }

 class Person {
     int age=0;
 }
/**
 * output p1.age = 3
 */

2.操作引用地址

传递了引用地址(不准确,只是作为标识)  com.ybj.cbt.Person@22d8cfe0

进入change()方法后

对原引用进行了新的实例化, 即在堆内分配了新地址,并将新的地址赋值给原引用,

p2=new Person()之后

p2就不指向原地址了, p2指向  com.ybj.cbt.Person@579bb367

所以p2.age++ 就不会对原对象产生影响

 

例如

再举个例子, 又是小明, 小明还有个双胞胎哥哥大明,大明的身份证号是13X

小明的身份证号是 12X,

现在对身份证号是 12X的人进行 信息录入处理, 在家里(main)大家都觉得小明(12X)的年龄是2 

家里人把小明(12X),带到了派出所(change),   不过这次是是给双胞胎哥哥大明办身份证, 反正长得都一样

到了派出所,

小明变成了大明( p2=new Person())

派出所(change)给大明(13X)的年龄加了一岁(p2.age++)

所以回到家后,小明(12X)的年龄没有变,因为是大明(13X)的年龄自增了

 

public class Reference {
      public static void main(String[] args) {
          Person p1 = new Person();
          System.out.println("p1 = " + p1);
          p1.age=2;
          change(p1);
          System.out.println("p1.age = " + p1.age);
      }
      public static void change(Person p2) {
          p2=new Person();
          System.out.println("p2 = " + p2);
          p2.age++;
     }
 }

 class Person {
     int age=0;
 }
/**
 * p1 = com.ybj.cbt.Person@22d8cfe0
 * p2 = com.ybj.cbt.Person@579bb367
 * p1.age = 2
 */

 

 

这里有些描述问题,日后改善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值