Java 引數傳遞

2021-07-02 16:51:59 字數 1311 閱讀 8497

1>程式如下:

package com.demo.test;

public class test ;

void set(string string,char ch)

public static void main(string args)

}

程式執行結果如下:

before set test-string:2018699554

****before set()--string:2018699554

****after set()--string:1311053135

after set test-string:2018699554

hello

xbc

2>分析程式執行結果

2.1>程式執行(1),(2)句之後,輸出物件test的變數string的system.

identityhashcode為:2018699554

2.2>程式執行呼叫test物件的set 方法,執行第(5)句,輸出引數string 的system.identityhashcode為:2018699554,可以看出是此時引數string也指向test物件的string變數所引用的記憶體空間;

2.3>然後執行第(6),(7),(8)句,將引數string的值置為「set success」,此時引數string 的system.identityhashcode為:1311053135,可以看出引數string指向了新的字串,而不是修改之前指向的字串。(這是因為,string類是不可變的,string 物件一旦生成應當會再發生改變了,對該物件重新賦值只會使該物件指向新建立的string 例項,而不是在修改原來string 物件的字串序列)。

2.4>當set 方法執行結束後,引數string 出棧(set 方法的棧)。

2.5>set 方法執行結束後,可以看出並沒有修改test物件中的string 變數值。故string 的值還為:「hello」

3>可以再分析一下變數ch的值為什麼改變了!!???

注意:system.identityhashcode(object o)方法返回指定物件的精確hashcode值,也就是根據該物件的位址計算得到的hashcode值。當某個類的hashcode()方法被重寫後,該類例項的hashcode()方法不能唯一地標識該例項物件;這時可以通過system.identityhashcode(object o)方法得到根據該物件的位址得到的hashcode值。如果兩個物件的system.

identityhashcode值相同,則這兩個物件絕對是同乙個物件。

java引數傳遞

所有的引數傳遞都是 傳值,從來沒有 傳引用 這個事實。所有的引數傳遞都會在 程式執行棧上新分配乙個值的複製品.樓主的第一段 public static void test pass passa 這個傳的 passa 的 位址值。這個 位址值 被複製了乙份。不信,你寫 public static vo...

Java引數傳遞方式

如果方法a呼叫方法b,如果方法 的引數是基本資料型別或者string型別,那麼方法 向方法b傳遞引數的值,如果方法 的引數是物件或者陣列,那麼,方法 向方法b傳遞引數的引用。例子如下 public class variabletest changeparameter param1,param2,pa...

java函式引數傳遞方式

1 對於基礎型別,傳遞值 函式內對引數的操作不影響到外部的引數值。2 對於非基礎型別,傳引用。一般情況下,函式中引數的操作會影響到外部的引數值。如函式對student物件修改name屬性後,外部的student物件的name就變了 對於基礎型別的包裝型別,本來也適用於本規則,但實際卻另外蹊蹺 pub...