傳值 傳址之異同小析

2021-09-01 23:11:52 字數 1618 閱讀 8817

傳值or傳址,這是乙個問題,也是乙個比較簡單的問題。

一般人們學習時,總喜歡把問題細節化,對於兩個事物,非要追根究底,找出其不同之處。其實準確說來,傳址也是一種傳值,不過傳的是位址的值而已,非人腦所能輕易識別,因此區別開來也是有理可循的。

關於這個話題,首先必須說明的一點就是:string只傳值不傳址!

值傳遞的乙個簡單例子:

public class swap 

}

public class manager 

}

輸出結果:

first:i ~ j = 100 ~ 20

second:i ~ j = 100 ~ 20

在這個例子中,swap的作用就是將 i 和 j 的值互換,而從結果來看並未做到這點。 因為基本資料型別int傳的是值。其實想要理解這個例子的話,可以將swap函式新增int返回值,返回 i ,並在此函式中輸出 i ,就會發現在first和second中間會輸出乙個:i = 20;這便可充分說明呼叫了swap(i,j);只是改變了其在class swap中的值,對manager中的引數並無影響。

而若要證明string只傳值不傳址,只需定義乙個string str=new string("abc");然後再定義乙個類將str值賦給屬性str,**如下;

string str=new string("abc");

test2 te=new test2(str);

te.print();

str="def";

system.out.println("str2 = "+str);

test2類中

string str;

public test2(string str)

public void print()

由string傳值可知結果:

str = abc

str2 = def

在此不多做贅述。

址傳遞又稱引用傳遞,所有用class,inte***ce,abstract class定義的類和介面以及陣列都屬於引用型別。想看址傳遞的具體表現形式,只需自定義乙個函式,然後用其建立物件,結果顯而易見。舉例如下:

public static void main(string args){

student st1=new student();

st1.setname("a");

student st2=new student();

st2.setname("b");

student st3=new student();

st3.setname("c");

//進行交換

st1=st2;

st2=st3;

st3=st1;

string name=st3.getname();

system.out.println("the name of st3 now is: "+name);

結果為「the name of str3 now is: b」, 從結果可看出,st3最終指向了st2物件,此處為傳址。

傳值和傳址

let dadproto let sonproto dadproto sonproto.name 李四 console.log sonproto name 李四 age 20 console.log dadproto name 李四 age 20簡單資料型別 傳值 let a 10 let b a ...

傳值和傳址

在vb中呼叫函式或過程時,傳遞引數有兩種方式 傳址和傳值。其中vb預設為傳址方式,關鍵字byref一般可以省略。byref a as integer 表示引數a以傳址方式傳遞給函式或過程 byval a as integer 表示引數a以傳值方式傳遞給函式或過程 傳址就是把乙個存放資料的記憶體位址傳...

傳值 傳址 繼承

基本資料型別 string,number,boolean 傳值,複雜資料型別按引用傳遞 傳址 傳值例 var a 1 b a b 結果 a 1,b 2 傳址例 var a 0,1 b a b.push 2 結果 a 0,1,2 b 0,1,2 方法一 slice var a 0,1 b a.slic...