java为什么是值传递呢

问:

值传递是什么呢

值传递和引用传递有什么不同呢

java采用值传递的意义何在呢

先上定义:

 值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
 引用传递:是指在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参数

引用传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。(c++中定义)

从定义中我们可以看出:

值传递是将参数的值复制了一份传递到函数中,函数中的参数接受到了这个值,对这个参数的改变跟之前的参数已经没有关系了,这两个参数分别属于不同的变量处于两个栈内存了,所以getList()方法对i的赋值对main方法中的i没有影响

上代码

   public static void getList(int i){
        i=2;
    }

    public static void main(String[] args){
        int i=1;
        SearchCategory.getList(i);
        System.out.println(i);
    }

引用传递呢在java中没这个说法,但在java中类似针对引用类型的数据的传递,也是复制引用类型变量的值,但此时的引用变量存储的只是指向堆内存存储真实值的地址,所以函数接收到的只是变量的存储地址,相当于获取了你朋友出差了,把房子给你住,给你的不是他的房子,而是他的钥匙,这个时候你对引用类型变量的操作,就像你拿着钥匙打开了朋友的大门,你干点啥,只要不复原,对你朋友肯定有影响是吧

上代码

 public static void getList(List<String> names){
        String[] strings = {"yang","chun","er","yong"};
        for (String string : strings) {
            names.add(string);
        }

    }

    public static void main(String[] args) {
        //静态方法中不能调用非静态方法和成员变量
        /*Category category = new Category();
        category.getNames();*/
        ArrayList<String> names = new ArrayList<>();
        names.add("小乔");
        System.out.println(names);
        getList(names);
        System.out.println(names);

    }

可以结合下面这个博客的图解分析看看

https://blog.csdn.net/weixin_29499829/article/details/114540186

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值