程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 我對java到底傳值還是傳引用的理解

我對java到底傳值還是傳引用的理解

編輯:關於JAVA

不少同學總是質疑java編程中參數的傳遞,到底是傳值還是傳引用?總是模稜兩可,導致編程涉及到 這方面時很苦惱,關於這個問題,我在這裡記述一下我的理解,歡迎批評指正。

首先鎖定一個根本方向:java中只有傳值!

這裡就有同學納悶了,只有傳值還要傳引用這一說法干嗎?為了便於理解,我們又可以這樣說:

在java中,簡單數據類型是按值傳遞的,對象是按引用傳遞的。。。暈,這人怎麼說話顛三倒四的, 唐僧了。。。。哈哈,莫急,聽我慢慢道來。。。。

1. 所謂傳值,壓棧的是參數值的副本,是把實參的值賦值給形參,對形參的任何修改,都不會影響到 實參的值;

2. 而傳引用(類似於C中的指針),壓棧的是引用的副本,是以地址的方式傳遞參數,傳遞以後,形 參和實參都指向同一個對象,只是他們名字可能不同而已,對形參的修改將影響實參的值。

細心的看客應該意識到了,上邊第2條中,引用的副本本身也是按值傳遞,所以,剛開始那種說法就通 了——java中只有傳值!

看過介紹,再結合下述例子看看是不是就懂了?

Java代碼

package com.test;

class Value {
    int i = 10;
}

public class Test {

    public static void main(String[] args)  {
        Test t = new Test();
        Value v = new Value ();
        int i = 10;
        System.out.println("a v.i = " +  v.i + ", i = " + i);
        t.test(v, i);
         System.out.println("c v.i = " + v.i + ", i = " + i);
    }

     private void test(Value v, int i) {
        v.i = 20;
         i = 20;
        System.out.println("b v.i = " + v.i + ", i = " +  i);
    }
}

輸出結果為:

a v.i = 10, i = 10

b v.i = 20, i = 20

c v.i = 20, i = 10

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved