引用型別變數進行值傳遞,關於Java引用型別變數

2025-01-13 02:25:17 字數 4023 閱讀 2594

1樓:網友

唔,,你要配合整個程式執行來看。

a a = new a();例項化a的乙個物件,並用a1指向該物件。

1";/將a的data欄位賦值為"1"

沒有問題,此時 main下的 = 1。

然後呼叫函式f(a);

轉向。static void f( a a1)

a1指向傳來的物件a

2";/修改a1指向的物件。

a1 = new a();a1指向另乙個物件,注意,這時a1已經不指向原來的物件a了,而原來的引用還是指向物件a

3";/修改新建的物件,不會影響原來物件a的值。

注意,首先設定了。

2"; 就是設定了 main下的a ,此時f中的a1和 main中的a 指向的是同乙個a的例項,所以修改都起作用。

然後 a1 = new a();重新宣告瞭乙個 a的例項。此時f中的a1 是 f過程內的a例項,和main過程內的a例項已經沒有關係了。

3"; 此時設定的就是f過程內的a例項的data,和main過程內的a例項已經沒有關係了。

轉回;輸出的是main過程內的a例項,跟f過程內的a例項已經沒有關係了。 data得值就是在f過程內沒有變更指向前設定的2。

2樓:網友

結果是正確的。

a是指向a的物件的例項,當呼叫函式f(a)時,a1也指向了a,這兩個同時指向乙個物件,當在函式中a1=new a()時,a1指向了新的物件例項,而a仍然指向原來的物件例項,故輸出a的結果時為2.

不知是否明白。

關於j**a引用型別變數

3樓:網友

比如:string s = new string();這個其實是在棧記憶體裡分配一塊記憶體空間為s,在堆記憶體裡new了乙個string型別的空間,在執行時是 棧記憶體裡的 s 指向堆記憶體裡的那一塊儲存空間。

4樓:網友

基本資料類型別存的是數值本身,而引用型別變數在記憶體放的是資料的引用,並不是資料的本身,引用型別變數是以間接方式去獲取資料。引用型別變數都屬於物件型別,如:陣列、類、字串等都屬於引用型別變數。

所以,引用型別變數裡面存放的是資料的位址。

說白了基本資料型別變數就像是直接放在櫃子裡的東西,而引用資料型別變數就是這個櫃子對應編碼的鑰匙。鑰匙號和櫃子對應。

j**a中的值傳遞和引用傳遞到底有什麼區別

5樓:寒雪皓軒

值傳遞:(形式引數型別是基本資料型別):方法呼叫時,實際引數把內它的值傳遞給對應的形式容引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。

方法呼叫時,實際引數是物件(或陣列),這時實際引數與形式引數指向同乙個位址,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式引數的改變將會影響實際引數。

6樓:網友

值傳遞:方來法呼叫時,自實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。

引用傳遞:也稱為傳位址。方法呼叫時,實際引數的引用(位址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方法執行中形式引數值的改變將會影響實際引數的值。

基本資料型別和引用資料型別作為方法引數,在傳遞時有什麼不同之處

7樓:晨愁葬我於水

基本資料型別按值傳遞,相當於複製了乙份過去,引用資料按位址傳遞,兩個地方根據位址使用同乙份資料,如被更改,則原有資料也會更改,例如陣列,在傳遞陣列時,如果接收到陣列之後,對其修改,那麼原來的陣列也會同時修改,因為它們指向同乙個位址!

值傳遞和引用傳遞的區別

8樓:網友

值傳遞是隻把物件的值傳入函式,函式中可以使用這個值,但卻無法更改該物件的值。我這裡以c語言為例。

如:void a(int v)

void main()

最後結果為010

這裡b的值在a函式中被呼叫,但是b本身沒變。其實值傳遞相當於在函式中新建了乙個物件然後對它賦值再使用。在上例中相當於:

void a(int v)

void a(int* v)

void main()

這裡的輸出結果是011,說明b的值在函式中被改變了。

9樓:丿隨風丶自在非

在不同的程式語言中可能會大同小異吧。

在c#中,這些都是針對方法而言的。

值傳遞指的是方法被呼叫時傳遞進來的引數是乙個副本(拷貝),而不是傳遞進來引數本身。換句話說對值傳遞引數的修改不會影響到呼叫方傳遞的引數物件;

而引用傳遞指的是方法被呼叫時傳遞進來的引數是乙個引用,換句話說傳遞進來的引數是指向呼叫方傳遞的引數本身的。對引用傳遞的引數的修改會影響到呼叫方傳遞的引數物件。

10樓:網友

假設$a = 1;$a的值是1,它有乙個位址比如是aaa;值傳遞就是把$a的值傳過去,其實相當於新設了乙個變數,它和$a除了值相等外沒任何關係;引用傳遞則是把$a的位址傳過去,那麼位址的值變了,$a自然也跟著變了。如:

a = 1;function get_a($a) get_a($a);echo $a;輸出結果還是1,這裡是值傳遞;

a = 1;function get_a(&$a);get_a($a);echo $a;輸出結果是2,這裡是引用傳遞。

11樓:網友

值傳遞僅僅傳遞的是值。

引用傳遞,傳遞的是記憶體位址,修改後會改變記憶體位址對應儲存的值。

用陣列來舉例就最清楚了,例如我們定義乙個陣列a=;

那麼a[0]=1,a[1]=2。

如果我們把陣列a裡的元素值作為引數傳遞,實際上只是進行了值傳遞,對陣列本身沒有影響。

如果我們把 陣列a的指標作為引數傳遞,那麼假如處理的函式就可以直接修改陣列a裡的值。

**例項:(只是寫個大概的邏輯,語法可能有錯誤)main()

test(a);

printf(a[0]);//此處列印的值是3, 這就是引用傳遞。

public void test(int b)

12樓:網友

函式定義是參數列中的引數稱為形參。函式呼叫時參數列中的引數稱為實參。一般c++都是傳遞引數的值,引數的值只能從實參傳遞給形參,反之不行。

對於被呼叫的函式,引數的值只能傳入不能傳出。此時實參可以是具體的值(變數)或者表示式,所以傳值呼叫本質上是傳遞表示式。當函式被呼叫時,系統首先對實參表示式求值再傳遞給形參。

對於基本資料型別,傳遞的是資料的拷貝;對於引用資料型別,傳遞的是引用的拷貝。

什麼是值傳遞和引用傳遞

13樓:硪丨曖戀

值傳遞:(形式引數型別是基本資料型別):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。

方法呼叫時,實際引數是物件(或陣列),這時實際引數與形式引數指向同乙個位址,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式引數的改變將會影響實際引數。

值型別和引用型別在作為引數傳遞時有什麼不同

14樓:撕念

往深了說,其實是堆和堆疊的區別,值型別是直接定義在堆疊上的,比如int型別,定義乙個int例項是不需要new的,而引用型別是在記憶體堆裡開闢空間的,比如乙個類,引用乙個類的例項是要new的,引用型別在傳遞引數時實際上是傳了乙個指標,也就是指向這個類實際記憶體位置的位址,所以在方法中對類做操作,會直接改變這個類的值,而值型別做引數傳到乙個方法裡操作,是不會影響到原來的值的,多說幾句就是:對引用型別的建立和操作所耗費的資源要大大高於值型別,因為訪問記憶體堆要比訪問堆疊效率低的多,但由於堆疊的空間很有限,所以只能放值型別進去而不能把所有東西都丟進去。

vfp thisform引用變數

原因是巨集替換必須以 或空格結束,aa.value中的點被認為是巨集替換的結束標誌,這樣原來的點就沒了,所以再加個點就可以了。thisform.aa.value 1 不可以引用嗎 對於這樣的問題,我個人的處理方法是將有關變數存於乙個事先定義的表中,這個事先定義的表中有一條記錄,記錄中有數字字段 日期...

問卷很多名義變數,SPSS名義變數怎麼進行因子,相關性和回歸分析

名義變數 無法進行因子分析 回歸分析這些。只能進行一些頻數統計 卡方分析 對應分析等 現在沒有辦法的,這個要求在一開始做前期問卷設計時就要考慮到後續要用的分析方法對資料的需求。要做因子分析 回歸這些,問卷題目必須是程度量化型別的,裡克特量表式,比如每天外出的頻率,選項從非常頻繁到非常不頻繁 抽菸的頻...

html檔案如何得到或者引用js變數的值

可以直接引用的,也可以做一些運算後輸出,不過要保證你引入 js 的 寫在前面,不然會變數值是內 undefined.想顯示出來可以容 document.write或者賦值給乙個容器的 innerhtml 或者賦值給乙個輸入框的 value 如何在html頁面中使用js變數 1 首先我 來們選擇建立乙...