在 Java 中,方法的所有参数都是 “传值” 的
-
基本类型:数值的拷贝
-
引用类型:引用的拷贝
-
方法内部改变参数对象的状态(修改某属性),改变将反映到原始对象上
因为方法内部和外部引用的是同一个对象
-
方法内部改变参数本身的引用(引用新对象),改变不会反映到原始对象上
因为传递的是引用的拷贝,不是引用本身
-
public class Test {public static void main(String[] args) {int num = 10;modifyNum(num);System.out.println("变量num的值:" + num); // 10String str1 = "hello"; modifyStr(str1);System.out.println("变量str1的值:" + str1); // helloString str2 = new String("hello");modifyStr(str2);System.out.println("变量str2的值:" + str2); // hello// str1 字面量 字符串常量池// str2 构造方法 堆内存区域System.out.println(str1 == str2); // falsePanda panda = new Panda("萌兰", 5);modifyPanda(panda);System.out.println("panda的name:" + panda.getName()); // 么么modifyReference(panda);System.out.println(panda); // Panda{name='么么', age=5}}public static void modifyNum(int num) {++num;}// 字符串是常量;它们的值在创建之后不能更改// 无论是通过哪种方式创建的字符串对象,一旦创建后,其内容就不能被修改public static void modifyStr(String str) {str += "world";}public static void modifyPanda(Panda panda) {panda.setName("么么");}public static void modifyReference(Panda panda) {panda = new Panda("飞云", 10);}
}