java 参数传递实例

java到底是值传递还是地址传递,网上说什么都有,面试的时候我也说不清,我让面试官举例子,我直接说结果,面试官说算了!

好了,回到正题,具体似乎什么传递我也说不清,举几个例子说明一下。

1.基本类型,包装类型和特殊类型

  public static void changeValue(String str,int a,Integer b){
        str="a";a=11;b=128;
    }

    public static void main(String[] args) {
        String str="A";
        int a=1;
        Integer b=127;
        changeValue(str,a,b);
        System.out.println("最后输出结果 str:"+str+",int a:"+a+",Integer b:"+b);
    }

最后输出结果 str:A,int a:1,Integer b:127

 由以上结果可以得知:基本类型和包装类型以及str都不会改变

2.传递对象 

    public static void changeValue(User user){
        user.setA(22);
        user.setB(128);
        user.setName("aaa");
    }

    public static void main(String[] args) {
        User user=new User(1,"A",127);
        changeValue(user);
        System.out.println("最后输出结果 str:"+user.getName()+",int a:"+user.getA()+",Integer b:"+user.getB());
    }

最后输出结果 str:aaa,int a:22,Integer b:128

由以上结果可以得知:如果是对象,则会改变! 

    public static void changeValue(User user) {
        user = new User();
        user.setA(22);
        user.setB(128);
        user.setName("aaa");
    }

    public static void main(String[] args) {
        User user = new User(1,"A",127);
        changeValue(user);
        System.out.println("最后输出结果 str:" + user.getName() + 
                ",int a:" + user.getA() + ",Integer b:" + user.getB());
    }


最后输出结果 str:A,int a:1,Integer b:127

由以上得知:如果传递的对象,对象的引用重新被赋予对象的话,不会改变!

总结:

对象类型传的是对象的引用,实则传递的是对象地址,然后重新给地址赋值,所以会改变,而在第三个例子中,传递的引用被赋予了另外一个对象,后面引用操作的是新的对象地址,我们在changeValue外面打印的是传入的地址,即旧对象地址,所以不会改变!

基本类型不会改变,对象传的会不会改变主要看是否被重新赋予新的地址!

以上只是个人的理解!

发布了23 篇原创文章 · 获赞 3 · 访问量 6858

猜你喜欢

转载自blog.csdn.net/weixin_41834814/article/details/83618931