目录
1. 值传递(按值传递):值传递是指在方法调用时,将实际参数的值复制到形参中。下面是一个值传递的示例:
指针内存分析:
2. 引用传递(按引用传递):引用传递是指在方法调用时,将实际参数的引用(地址)复制到形参中。下面是一个引用传递的示例:
指针内存分析:
3、总结:
在Java中,值传递和引用传递涉及到基本数据类型、字符串和对象。以下是对值传递和引用传递的指针内存分析:
1. 值传递(按值传递):
值传递是指在方法调用时,将实际参数的值复制到形参中。下面是一个值传递的示例:
public static void main(String[] args) {
int a = 10;
changeValue(a);
System.out.println("After changeValue() call, a = " + a);
}
public static void changeValue(int value) {
value = 20;
}
指针内存分析:
- 在`main`方法中,`int a = 10`在内存中创建一个变量`a`,其值为10。
- 调用`changeValue(a)`时,将`a`的值(10)复制到`changeValue`方法的形参`value`中。此时,`value`也等于10。
- 在`changeValue`方法中,`value = 20`将`value`的值更改为20。这只是改变了`changeValue`方法中的`value`,对`main`方法中的`a`没有影响。
- 因此,在`main`方法中输出`a`时,仍然输出10。
2. 引用传递(按引用传递):
引用传递是指在方法调用时,将实际参数的引用(地址)复制到形参中。下面是一个引用传递的示例:
public static void main(String[] args) {
int[] arr = {1, 2, 3};
changeArray(arr);
System.out.println("After changeArray() call, arr = " + Arrays.toString(arr));
}
public static void changeArray(int[] array) {
array[0] = 10;
}
指针内存分析:
- 在`main`方法中,`int[] arr = {1, 2, 3}`创建了一个数组`arr`,其引用存储在变量`arr`中,数组内容存储在堆内存上。
- 调用`changeArray(arr)`时,将`arr`的引用复制到`changeArray`方法的形参`array`中。此时,`array`和`arr`都指向同一个数组。
- 在`changeArray`方法中,`array[0] = 10`直接修改了数组的内容。因为`array`和`arr`指向同一个数组,所以`main`方法中的`arr`也会被修改。
- 因此,在`main`方法中输出`arr`时,会输出`[10, 2, 3]`。
3、总结:
- 值传递:方法接收实参的值,修改形参不影响实际参数。适用于基本数据类型和字符串。
- 引用传递:方法接收实参的引用,修改形参会影响实际参数。适用于对象类型(数组、类和接口的实例)。