随笔:基本数据类型、引用数据类型数据 —— 值交换

一、基本数据类型数据 —— 值交换:

Demo:定义一个方法交换两个基本数据类型数据。

public static void changeValue(int a, int b){
    int temp = a;
    a = b;
    b = temp;
}
// 测试:
public static void main(String[] args) {
    int a = 3;
    int b = 5;
    System.out.println("before change a: " + a + ", b: " + b);
    changeValue(a,b);
    System.out.println("after change a: " + a + ", b: " + b);
}
// 结果:交换不成功
before change a: 3, b: 5
after change a: 3, b: 5

结果解释:
1、形式参数是所属函数的局部变量。
2、不同函数的局部变量是相互独立的,互不影响。

Demo运行过程:
在这里插入图片描述
1、运行主函数,在栈中开辟main方法内存空间。
2、成员变量初始化。
3、调用changeValue方法。
4、开辟changeValue方法内存空间,将值3、5传递给a、b。
5、交换,a=5,b=3。

注意: 在changeValue中确实是将两个值交换过来了,但是对main方法中的a、b没有影响。

二、引用数据类型数据 —— 值交换:

Demo:定义一个函数交换数组中两个元素的位置。

public static void changeArr(int[] arr, int index1, int index2){
    int temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}
// 测试:
public static void main(String[] args) {
    int[] arr = {23, 10, 9};
    System.out.println("before change:" + Arrays.toString(arr));
    changeArr(arr,1,2);
    System.out.println("after change:" + Arrays.toString(arr));
}
// 结果:交换成功
before change:[23, 10, 9]
after change:[23, 9, 10]

结果解释:
main方法中的变量arr 和 changeArr方法中的arr变量并非同一变量,只不过是指向了同一对象,从而值交换成功。

Demo运行过程:
在这里插入图片描述
1、main方法运行,在栈内存中开辟一个main方法内存空间。
2、声明一个变量arr。
3、在堆内存中创建一个数组(长度为3)(0x98),此时main方法空间的arr也是0x98,使其arr指向了堆内存空间。
4、调用changeArr(arr,1,2)方法。
5、jvm为changeArr方法在栈中分配一片内存空间,此时changeArr有3个参数,arr为变量,传递过去的是地址值,1,2为值,传递的是实际的值。
6、值交换,操作的是堆内存中的0x98这片空间。
7、值交换逻辑运行完成,changeArr在栈中的内存空间释放。
8、回到main方法中执行:Sys.o.p(“after change:” + Arrays.toString(arr)); 此时,arr指向了堆内存中的0x98这片空间,该空间已被changeArr修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值