傳值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...