按值传递仍是按引用传递详细解说

一、概述 学习

前天在作系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,可是有个问题感受仍是很模糊,就是Java中究竟是否只存在值传递,由于在查阅资料时,常常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点我的以为应该是站的角度不一样而得出两个不一样的说法,其实两个说法其中的原理是同样的,只要我们懂得其中的原理,那么至于叫什么也就无所谓了,下面是我在网上看到的一个帖子,解释的感受挺全面,就转过来,以供之后学习参考:spa

 

二、值传递code

指的是在方法调用时,传递的参数是按值的拷贝传递。示例以下:ip

/**
 * Copyright © 2015-2016 All rights reserved.
 */
package com.yujin.passByValue;
/**
 * @description 值传递
 * @author <a href="yujin@zxxk.cn">yujin</a>
 * @date 2016年4月12日 上午8:28:55
 * @version 1.0  
 */
public class Demo1 {

  public void changeValue(int a){
    a = a+1;
    System.out.println("changeValue method:"+a);
  }
  public static void main(String[] args) {
    Demo1 demo1 = new Demo1();
    int a = 10;
    demo1.changeValue(a);
    System.out.println("Main method "+a);
  }
}

代码分析:io

三、引用传递class

/**
 * Copyright &copy; 2015-2016 All rights reserved.
 */
package com.yujin.passByValue;
/**
 * @description 引用传递
 * @author <a href="yujin@zxxk.cn">yujin</a>
 * @date 2016年4月12日 上午8:52:02
 * @version 1.0  
 */
public class Demo2 {
  
  public void changeObjetValue(Student stu){
    //stu = new Student();
    stu.age = 31;
    stu.name = "宋江";
    System.err.println("changeObjetValue method:"+stu.age+"--"+stu.name);
  }
  
  public static void main(String[] args) {
    Demo2 demo2 = new Demo2();
    Student s = new Student();
    s.age = 21;
    s.name = "华荣";
    demo2.changeObjetValue(s);
    
    System.err.println("main  method:"+s.age+"--"+s.name);
  }
  
}
class Student{
  public int age;
  public String name;
}
相关文章
相关标签/搜索