zoukankan      html  css  js  c++  java
  • 值传递和引用传递的区别

    示例代码:

    public static void main(String[] args) {
            
            int b = 0;
            change(b);
            System.out.println(b);
        }
        public static void change(int a)
        {
            a = 1;
        }

    结果:

     为什么b的值不会被修改为1呢?
    我们知道每个方法执行的时候都会在虚拟机栈中生成一个栈帧,而且这个栈帧中存储着局部变量表,操作数栈,动态链接等。

    而change这个方法中的int a就保存在局部变量表中。但是对于int b来说,则保存在堆中。也就是说a和b是两个不同的东西。

    而且栈帧中的int a只是堆中int b的一个副本。

     示例代码:

      public static void main(String[] args) {
    
    
            StringBuffer str = new StringBuffer("hello");
            ReferencePassing(str);
            System.out.println(str);
        }
    
    
        public static  void ReferencePassing(StringBuffer sb)
        {
            sb.append(" world");
        }

    结果:

     显然可以看到str的值已经改变了。

    同样执行ReferencePassing方法执行的时候,虚拟机栈同样会生成一个栈帧。只不过局部变量表中存放的是sb的引用地址,而这个地址指向的正是堆中的str对象。

    所以堆中的str对象才会被修改。

     
    
    
    
    
    
  • 相关阅读:
    sql server 的语句形式
    restful规范
    sql server 相对应的增删改查以及表的创建及修改
    简单介绍函数sorted
    简单介绍sql server
    Python中三种格式化输出的方式
    基于socket 数据传输的粘包问题
    Python socket 套接字实现通信
    Dapr-状态管理
    Dapr-服务调用
  • 原文地址:https://www.cnblogs.com/swqblog/p/13233082.html
Copyright © 2011-2022 走看看