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的值不会发生变化。
         ****************************************/
    }
}

代码说明与运行结果,见上面。

 

 

原文地址:https://www.cnblogs.com/lojun/p/8681906.html