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]

     理解内存图

     

  • 相关阅读:
    $Poj2228$/洛谷$SP283 Naptime$ 环形$DP$
    $Poj1952 $洛谷$1687 Buy Low,Buy Lower$ 线性$DP+$方案计数
    $Poj3585 Accumulation Degree$ 树形$DP/$二次扫描与换根法
    洛谷$1541$ 乌龟棋 线性$DP$
    $Loj10157$ 皇宫看守 树形$DP$
    $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
    $Loj10155$ 数字转换(求树的最长链) 树形$DP$
    洛谷$2015$二叉苹果树
    $CH5302$ 金字塔 区间$DP$/计数类$DP$
    [hiho1035] 自驾旅行III
  • 原文地址:https://www.cnblogs.com/maggiejyt/p/7777191.html
Copyright © 2011-2022 走看看