目录

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、总结:

- 值传递:方法接收实参的值,修改形参不影响实际参数。适用于基本数据类型和字符串。
- 引用传递:方法接收实参的引用,修改形参会影响实际参数。适用于对象类型(数组、类和接口的实例)。