Java方法参数传递的底层分析

打印 上一主题 下一主题

主题 774|帖子 774|积分 2322

转自:
 http://www.java265.com/JavaCourse/202206/3770.html
下文笔者讲述java方法参数传递,到底传递了何种东西的详细简介说明,如下所示
  1. 在java的学习中,我们经常被问及一个问题,
  2. 调用java的参数时,
  3. java是进行的值传递,还是进行的引用传递呢?
  4. ----------------------------------------------
  5. 笔者先告诉大家,java方法中的参数进行的值传递
  6.   (基础类型传入的是实际值,引用类型传入的指向引用类型的内存地址)
  7. 那么可能有人会问:有些传递的对象,
  8.    在方法里面改变了值,外面也会发生变化,
  9.    这是为什么呢?下文笔者将一一道来,如下所示
  10. ----------------------------------------------
复制代码
首先笔者会讲述java参数存储
  1.   
  2. 在JVM的内存模型中
  3.   有栈和堆
  4.   栈是线程私有
  5.   每个线程都有个私有的栈
  6.   而堆是所有线程共享的
  7. 方法在执行时,都会创建一个栈帧
  8.   栈帧中的局部变量表是用来存储一组变量值的内存空间
  9.   用于存放方法参数和方法内部定义的局部变量
  10. 所以当我们做如下的代码声明时,是在栈上开辟内存空间存储
  11. int b = 8888;
  12. User user= null;
  13. 如果我们创建对象时,user=new User()时,则会在堆上开辟内存空间,初始化User对象
  14. 然后再将User对象的地址赋值给user
  15. 从以上的存储方式,我们可以看出:
  16. 基本类型和引用类型都存在栈中
  17.   引用指向的实际对象存在堆中
复制代码
  1.    public static void main(String[] args) {
  2.         int a = 88;
  3.         m1(a);
  4.         System.out.println("main1 a="+a);
  5.         User user = new User("java265");
  6.         m2(user);
  7.         System.out.println("main2 name="+user.getName());
  8.         m3(user);
  9.         System.out.println("main3 name="+user.getName());
  10.     }
  11.     public static void m1(int a1){
  12.         a1 = 8;
  13.         System.out.println("m1 a1="+ a1);
  14.     }
  15.     public static void m2(user user1){
  16.         user1.setName("jjjjj");
  17.         System.out.println("m1 name="+ user1.getName());
  18.     }
  19.     public static void m3(user user1){
  20.         user1 = new user("555");
  21.         System.out.println("m2 name="+ user1.getName());
  22.     }
  23. 运行结果:
  24. m1 a1=8
  25. main1 a=88
  26. m1 name=jjjjj
  27. main2 name=jjjjj
  28. m2 name=555
  29. main3 name=jjjjj
复制代码
  1. 从m1方法执行的结果可以验证出
  2.    当参数传递的是基本类型,将实参的值复制到方法的形参中
  3.     即传递的是原始值的副本,操作副本不会影响原始值。
  4. 从m2方法执行的结果可以验证出
  5.    当参数传递的是引用类型,是将实参的引用拷贝到方法的行参中
  6. 即:传递的是实参所引用的对象在堆中的地址值的副本
  7.    引用用于访问实际对象,也就意味着对形参进行修改会影响实参。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表