Java值传递的代码讲解,包含基本类型,引用类型

Canace ·
更新时间:2024-09-20
· 689 次阅读

值传递的代码讲解

java中都是值传递,它是继承于c++但是移除出了很多难懂的语法,
js也是值传递;

1.啥叫值传递啊:
顾名思义,就是值的传递,基本类型,引用类型,在创建出来,就是存在于当前方法所在的栈帧,就是调用其他方法,传的是引用地址,不是真实对象(看代码的输出就懂了)

2.引用类型传引用?
这是坑,Java只有值传递,学过C++知道,C++有值传递,引用传递,Java已经摒弃了引用传递,因为我用变量接一下多好,简洁,不花里胡哨。
上代码:

package com.qcby.studentManeger; public class Test { public static void main(String[] args) { //第一部分 int a=10; int b=20; exchange(a,b); //交换的是exchange的新开的地址,exchange战栈帧弹出 System.out.println(a);//10 System.out.println(b);//20 //第二部分 //值引用,exchange的新开的地址a1^,b1^, //exchange战栈帧弹出,裂开,没有接返回值,没法把改变应用到实际的a1,b1 // 虽然是地址换来换去,exchange栈帧弹出,还是没改变main的a1,b1 Student a1=new Student(); Student b1=new Student(); a1.name="张三"; b1.name="李四"; exchange(a1,b1); System.out.println(a1);//张三 System.out.println(b1);//李四 //第三部分 //值引用,但是堆中的对象内容只有一份,可以变 exchange1(a1,b1); System.out.println(a1);//张三 System.out.println(b1);//李四 } public static void exchange(int a,int b){ int temp=a; a=b; b=temp; } public static void exchange(Student a,Student b){ Student temp=a; a=b; b=temp; } public static void exchange1(Student a,Student b){ String temp=a.name; a.name=b.name; b.name=temp; } }

ok,还有解释
代码三部分,对应三种情况:
三张图,对应在jvm的存储情况
左侧是栈(存局部变量的),右侧是堆(存对象实际内容)
原创文章 16获赞 17访问量 938 关注 私信 展开阅读全文
作者:code_mzh



引用类型 JAVA

需要 登录 后方可回复, 如果你还没有账号请 注册新账号