值传递的基本概念
在Java中,所有的方法参数传递都是“值传递”的,这意味着方法接收的是参数值的一个拷贝,而不是参数本身。具体行为取决于数据类型:
- 基本数据类型:
- 对于基本数据类型(如
int,double,char等),方法接收的是这些值的拷贝。 - 在方法内部对参数的修改不会影响到方法外部的原始变量。
- 对于基本数据类型(如
- 引用数据类型:
- 对于对象(引用类型),传递的是对象引用的拷贝,而不是对象本身。
- 方法内部可以通过引用拷贝修改对象的状态(即对象内的字段值),因为引用指向的是同一个对象。
- 但是,不能通过引用拷贝让外部的引用指向一个新的对象。
示例分析
- 基本类型的值传递:
public class ArgsDemo01 {public static void main(String[] args) {int number = 100;System.out.println("调用change方法前: " + number); // 输出 100change(number);System.out.println("调用change方法后: " + number); // 仍然输出 100}public static void change(int number) {number = 200;}}number在方法内部被修改为200,但这不会影响到main方法中的number,因为传递的是值的拷贝。
- 引用类型的值传递:
public class ArgsDemo02 {public static void main(String[] args) {int[] arr = {10, 20, 30};System.out.println("调用change方法前: " + arr[1]); // 输出 20change(arr);System.out.println("调用change方法后: " + arr[1]); // 输出 200}public static void change(int[] arr) {arr[1] = 200;}}- 数组
arr的引用被传递到方法中,因此方法内部对数组内容的修改会影响到原始数组。
- 数组
内存分配视角
- 栈内存:用于存放方法调用和基本类型变量的值。
- 堆内存:用于存放对象和数组。
- 当方法调用时,基本数据类型的值或引用的拷贝被压入栈中。对于对象,堆中的对象可以通过栈中的引用进行操作。

被折叠的 条评论
为什么被折叠?



