读这一篇文章,告诉你 Java 方法调用时参数的秘密

你能一眼看出这段代码的执行结果吗?

public class ParamPassing {
	private static int intStatic = 222;
    private static String stringStatic = "old String" ;
    private static StringBuilder stringBuilderStatic = new StringBuilder ("old stringBuilder");

    public static void main (String[] args) {
        // 实参调用
        method(intStatic);
        method(stringStatic);
        method(stringBuilderStatic, stringBuilderStatic);

        // 输出(第1处)
        System.out.println(intStatic); 
        method();
        // 无参方法调用(第2处)
        System.out.println(intStatic); 
        // 输出依然是:old string
        System.out.println(stringStatic); 
        // 输出结果参考下方分析
        System.out.println(stringBuilderStatic);
    }

    // A方法
    public static void method (int intStatic) {
        intStatic = 777;
    }

    // B方法
    public static void method() {
        intStatic = 888;
    }

    // C方法
    public static void method(String stringStatic) {
        //String 是 immutable 对象,String 没有提供任何方法用于修改对象
        stringStatic = "new String";
    }

    // D方法
    public static void method(StringBuilder stringBui1derStatic1,
                              StringBuilder stringBuilderStatic2) {
        //	直接使用参数引用修改对象(第3处)
        stringBui1derStatic1.append(".method.first-");
        stringBuilderStatic2.append("method.second-");

        // 引用重新畎值
        stringBui1derStatic1 = new StringBuilder("new StringBuilder");
        stringBui1derStatic1.append("new method 's append");
    }
}

请思考三秒!
请思考三秒!!
请思考三秒!!!




现在,揭晓答案:

222
888
old String
old stringBuilder.method.first-method.second-

那么,你答对了吗?



想知道解析就往下读吧!

在 Java 中,参数的传递都是值传递 —— 也就是“浅拷贝
基本数据类型,传递是值;
引用类型,传递的是引用变量指向的地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值