在Java中,传递参数有两种方式:值传递和引用传递。在值传递中,参数的值被复制到一个新的变量中,而在引用传递中,参数传递的是变量的地址。
下面看一个简单的示例:
public class Test { public static void main(String[] args) { int a = 10; String b = "hello"; System.out.println("a的值为:" + a); System.out.println("b的值为:" + b); change(a, b); System.out.println("a的值为:" + a); System.out.println("b的值为:" + b); } public static void change(int a, String b) { a = 20; b = "world"; System.out.println("a的值为:" + a); System.out.println("b的值为:" + b); } }
以上代码输出:
a的值为:10 b的值为:hello a的值为:20 b的值为:world a的值为:10 b的值为:hello
在change方法中,我们将a的值设为20,将b的值设为"world",然而在main方法中,a的值仍然是10,b的值仍然是"hello"。这是因为,在Java中,对于基本数据类型的参数,传递的是值,而不是地址。
对于引用类型的参数,传递的是地址。下面看一个示例:
public class Test { public static void main(String[] args) { int[] arr = {1, 2, 3}; System.out.println(Arrays.toString(arr)); change(arr); System.out.println(Arrays.toString(arr)); } public static void change(int[] arr) { for (int i = 0; i< arr.length; i++) { arr[i] *= 2; } System.out.println(Arrays.toString(arr)); } }
以上代码输出:
[1, 2, 3] [2, 4, 6] [2, 4, 6]
在change方法中,我们将数组arr中的每个元素都乘以2,结果也输出了。而在main方法中,调用完change方法后,arr的值也被改变了。
总结来说,Java中的值传递和引用传递的区别在于传递参数的方式不同。对于基本数据类型的参数,传递的是值,而对于引用类型的参数,传递的是地址。