读这一篇文章,告诉你 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 中,参数的传递都是值传递 —— 也就是“浅拷贝
基本数据类型,传递是值;
引用类型,传递的是引用变量指向的地址

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

猜你喜欢

转载自blog.csdn.net/Snakehj/article/details/109711170