按值傳遞仍是按引用傳遞詳細解說

一、概述 學習

前天在作系統的時候被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;
}
相關文章
相關標籤/搜索