值传递和地址传递
Feature
-
简单数据类型
- 只传递值
-
引用数据类型
-
传递地址
public class TestOne { public static void main(String[] args) { int[] a = new int[]{1}; array(a); System.out.println(a[0]); } public static void array(int[] b) { // 引用数据类型传递地址,所以main 中a[0] = 2; b[0] = 2; // b = new int[] 之后,b会指向一块新的地址空间 b = new int[]{3}; } }
-
array(a); public static void array(int[] b)
main 中的 a 和 arrry 中的 b 由于引用数据之间是地址传递,因此一开始他们会指向相同的地址空间
b[0] = 2;
这也会修改 main中数组的值
-
b = new int[]{3};
此时 b 会指向新开辟的地址空间,因此也就不会修改 main中数组的值了
-
-
第二种情况
public class Deliver { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; change(array); System.out.println(array); } public static void change(int[] array) { int[] array1 = {1, 2, 3}; array[0] = 0; array = array1; System.out.println(array); }
main中的array,和change中的array 指向同一个地址,但是它俩是两个不同的引用。
array = array1; // change中修改arrry指向对象,但不会改变main中引用的指向
array[0] = 0; // change中修改这个值, main中array[0]也会被修改