- 值传递
使用一个定义好的变量 赋值给另外一个定义好的变量 若变量为基本数据类型, 此时变量所保存的是数据值(等同于复制了一个值 改变任意一个变量的值 都不会影响到另外一个变量)
基本数据类型: byte short int long double float char boolean
例:
// 基本数据类型
int a = 10;
int b = a;
b = 20;
System.out.print("a = " + a + " b = " + b );
输出结果:
a = 10 b = 20
- 引用传递
使用一个定义好的变量 赋值给另外一个定义好的变量 若变量为引用数据类型, 此时变量所保存的是堆空间中的地址值(等同于两个人操作同一台电脑 任何一个人对电脑进行操作 另外一个人也会收到影响)
// 引用数据类型
int[] array = new int[]{1,9,4,5};
int[] nums = array;
nums[0] = 999;
System.out.print("array[0] = " + array[0] + " nums[0] = " + nums[0]);
输出结果:
array[0] = 999 nums[0] = 999
- 方法形参的值传递与引用传递 ```java
/**
- 方法形参的赋值测试
- 值传递
引用传递 */ public class ValueTransfer {
public static void main(String[] args) {
// 基本数据类型
int num = 10;
// 引用数据类型
int[] array = new int[]{1,9,4,5};
ValueTransfer test = new ValueTransfer();
System.out.println("值传递操作前num = " + num);
// 值传递测试
test.updateNum(num);
System.out.println("值传递操作后num = " + num);
System.out.println("引用传递操作前array[0] = " + array[0]);
// 引用传递测试
test.updateArray(array);
System.out.println("引用传递操作后array[0] = " + array[0]);
}
/**
* 值传递测试
* 方法参数为基本数据类型 因此为值传递
* 基本数据类型: byte short int long double float char boolean
* 值传递(复制一个变量 方法中对变量的任何操作都不会影响到原来的变量)
* @param num
*/
public void updateNum(int num) {
num = 0;
}
/**
* 引用传递测试
* 方法参数为引用数据类型
* 引用传递(将变量在堆中的地址值复制给新变量 新变量发生改变 原来的变量也会收到影响)
* @param array
*/
public void updateArray(int[] array) {
// 将下标0的值修改为999
array[0] = 999;
}
} ```