java到底是值传递还是引用传递?

118 阅读2分钟
java值传递
  • 值传递 :方法接收的是实参值的拷贝,会创建副本。
  • 引用传递 :方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。

Java 中将实参传递给方法(或函数)的方式是 值传递

  • 如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。
  • 如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。

举例说明:

public class PassByValue {
    public static void main(String[] args) {
        char[] name = {'外卖', '小冰糖'};
        System.out.println("调用方法前:" + new String(name));
        paramTest(name);
        System.out.println("调用方法后:" + new String(name));
    }
    private static void paramTest(char[] n) {
        n = new char[2]; // 添加此行代码
        n[1] = '神';
        System.out.println("方法中修改为:" + new String(n));
    }
}

如果是值传递的话:name -> {'外卖', '小冰糖'}, 并且 n -> {'外卖', '小冰糖'}

如果是引用传递的话:name -> {'外卖', '小冰糖'},但是 n -> name

这样子的话修改n的内容将会改变name的内容,但实际的输出并不是这样子的, n = new char[2]并没有改变name的内容,故java用的是值传递

调用方法前:外卖小冰糖

方法中修改为:神

调用方法后:外卖小冰糖

===============================================================

推荐一个公众号:外卖小冰糖

领券下单更便宜,一起薅平台羊毛,所得俑金对半分,超过0.3元即可返回无套路。

他主要有以下几点优势:

1.安静:不会每天推送消息打扰人。

2.返俑:你每下一个单都会获得一定的俑金,每单能拿到0.5-1元这样的金额,每天晚上8点左右自动通过微信零钱转给你,首次下单额外补贴0.5元俑金。

3.公众号内部提供一些小游戏,无聊的时候可以玩一玩,如:人生重开变态版,2048,飞机滑行等小游戏。

4.提供一些工具类的功能,如查看每日天气,每日英语,二维码生成,短链生成等。

希望能帮助到大家,祝大家生活愉快!!