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对象才会被修改。

     
    
    
    
    
    
  • 相关阅读:
    45.如何优雅的删除一张大表?
    13.安装上传和下载文件
    12.yum install 和yum localinstall区别
    7.Mysql之MGR环境搭建
    mod运算
    取整
    同余式
    Windows下的重定向
    C语言求正负余数
    复利计算公式
  • 原文地址:https://www.cnblogs.com/swqblog/p/13233082.html
Copyright © 2011-2022 走看看