zoukankan      html  css  js  c++  java
  • java 值传递 或 引用传递?

    先看下网上关于值传递和引用传递的概念

    值传递:方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值

    引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址,在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象

    先不管值传递还是引用传递,直接来看例子

    eg(1)

    public  class Test1 {
          public  static  void main(String[] args) { 
            Person a = new Person(23, "a" ); 
            Person b = new Person(22, "b" ); 
            System.out.println( "改变前a:" + a + "
    b:" + b); 
            changeValue(a, b); 
            System.out.println( "改变后a:" + a + "
    b:" + b); 
        }
    
        private  static  void changeValue(Person a, Person b) { 
             a.setAge( 10 ); 
             b.setAge( 11 ); 
        } 
    }

    输出

    改变前a:Person [age=23] 
    b:Person [age=22] 
    改变后a:Person [age=10] 
    b:Person [age=11]
    

      理解内存图

    eg(2)

    public  class Test1 {
          public  static  void main(String[] args) { 
            Person a = new Person(23, "a" ); 
            Person b = new Person(22, "b" ); 
            System.out.println( "改变前a:" + a + "
    b:" + b); 
            changeValue(a, b); 
            System.out.println( "改变后a:" + a + "
    b:" + b); 
        }
    
        private  static  void changeValue(Person a, Person b) { 
            Person temp = a; 
            a = b; 
            b = temp; 
        } 
    }

    输出

    改变前a:Person [age=23 ] 
    b:Person [age =22 ] 
    改变后a:Person [age =23 ] 
    b:Person [age =22]

     理解内存图

     

  • 相关阅读:
    使用watch定时执行命令并显示结果
    LVS配置
    myeclipse通过查询源码查询方法
    导入struts2框架项目无法运行tomcat
    解决eclipse/myeclipse导入项目时出现红色叹号的方法
    my/eclipse中的debug调试
    导入项目后servlet报错
    转到Servlet出现500型错误
    关于快捷键导包失败
    关于jsp找不到servlet
  • 原文地址:https://www.cnblogs.com/maggiejyt/p/7777191.html
Copyright © 2011-2022 走看看