你能一眼看出这段代码的执行结果吗?
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 中,参数的传递都是值传递 —— 也就是“
浅拷贝
”
基本数据类型,传递是值;
引用类型,传递的是引用变量指向的地址