java中方法的参数传递机制(值传递还是引用传递)
1、java方法传入的参数,属于参数传递还是值传递?
答:属于值传递。
直接上代码示例:
public class Human { public String name="lowi"; public int age=22; int num=0; // public static void main(String[] args) { // System.out.println("num=="+num); // } }
测试对象以及数据的引用:
public class People { public String getName(Human h){ System.out.println("变更之前测试》》》》》name="+h.name+" ,age=="+h.age+" ,num="+h.num); //值传递,这里的h的地址与主方法中ha指向同一个地址 h.name="lowi2"; h.age=33; System.out.println("变更之后测试》》》》》name="+h.name+" ,age=="+h.age+" ,num="+h.num); //引用传递,不改变主方法中的ha地址,也不影响ha的值 //这里的h是与前面代码的h属于不同的存储地址 h=new Human(); System.out.println("新赋值的human》》》》》name="+h.name+" ,age=="+h.age+" ,num="+h.num); return h.name; } public static void main(String[] args) { People peo=new People(); Human ha=new Human(); System.out.println("测试1111》》》》》name="+ha.name+" ,age=="+ha.age+" ,num="+ha.num); ha.name="lowi3"; System.out.println("测试2222》》》》》name="+ha.name+" ,age=="+ha.age+" ,num="+ha.num); String name2=peo.getName(ha); System.out.println("新赋值后《《《《name="+name2); System.out.println("测试3333》》》》》name="+ha.name+" ,age=="+ha.age+" ,num="+ha.num); /*************************************** ===========运行结果: 测试1111》》》》》name=lowi ,age==22 ,num=0 测试2222》》》》》name=lowi3 ,age==22 ,num=0 变更之前测试》》》》》name=lowi3 ,age==22 ,num=0 变更之后测试》》》》》name=lowi2 ,age==33 ,num=0 新赋值的human》》》》》name=lowi ,age==22 ,num=0 新赋值后《《《《name=lowi 测试3333》》》》》name=lowi2 ,age==33 ,num=0 --------------------------------------------- 说明:主方法main()中的变量ha和getName(ha)中的变量ha指向同一个地址,在getName(ha)方法中并没有改变ha的地址而是改变了属性的值 所以结果是main方法中的ha的值发生了变化,但是这不是引用传递。除非在getName方法中new一个新的对象,把这个新的地址赋给ha,则为引用传递,其结果中ha的值不会发生变化。 ****************************************/ } }
代码说明与运行结果,见上面。