值傳遞和引用傳遞的區別

2021-10-01 07:08:08 字數 2803 閱讀 8675

public

class

test

}

執行**:得到的當前的結果如下

int1==

10int2==

10改變之後

int1==

10int2==

20process finished with exit code 0

根據結果會發現int型別的傳遞,當int2值改變的時候,int1的值是沒有任何變化的,所以基本型別都是根據它的值去傳遞的,傳遞之後,int2的值得改變和int1的值已經沒有任何關係了

**:

string str1 =

"str1"

; string str2 = str1;

system.out.

println

("str1=="

+ str1)

; system.out.

println

("str2=="

+ str2)

; str2 =

"str2"

; system.out.

println

("改變之後");

system.out.

println

("str1=="

+ str1)

; system.out.

println

("str2=="

+ str2)

;

結果:

str1==str1

str2==str1

改變之後

str1==str1

str2==str2

process finished with exit code 0

結果證明string的結果 和int的結果是一樣的,但是表達的方式不一樣, string的表達方式和integer是一樣的,都是重新new的方式去傳遞值的。

string str2 = str1; 這句話可以理解為 string str2 = new string(str1); 把str1當做引數傳遞過去,重新new了乙個新的string,所以str2的值和str1的值 雖然是一樣的,但是str2 和str1卻不是同乙個string

**: 建立了乙個testdemo的類 ,裡面有乙個string型別的變數 txtprotected

testdemo testdemo1 =

newtestdemo()

; testdemo1.

settxtprotected

("potected");

testdemo testdemo2 = testdemo1;

testdemo testdemo3 =

newtestdemo()

; testdemo3.

settxtprotected

(testdemo1.

gettxtprotected()

);system.out.

println

("testdemo1=="

+ testdemo1.

gettxtprotected()

);system.out.

println

("testdemo2=="

+ testdemo2.

gettxtprotected()

);system.out.

println

("testdemo3=="

+ testdemo3.

gettxtprotected()

);testdemo2.

settxtprotected

("testdemo2");

system.out.

println

("改變之後");

system.out.

println

("testdemo1=="

+ testdemo1.

gettxtprotected()

);system.out.

println

("testdemo2=="

+ testdemo2.

gettxtprotected()

);system.out.

println

("testdemo3=="

+ testdemo3.

gettxtprotected()

);

執行**的結果:

testdemo1==potected

testdemo2==potected

testdemo3==potected

改變之後

testdemo1==testdemo2

testdemo2==testdemo2

testdemo3==potected

process finished with exit code 0

從結果可看出 test2 和test1 是一樣的結果,但是test3和 test1(test2)的結果並不是一樣的

那麼test2這個類的指標所指向的地方 是和test1 所指向的地方 是乙個 ,所以test2的 txtprotected 會導致 test1

的txtprotected 的值發生改變。

test3和 test1的值卻是不一樣的,其實test3的方式 和上面string的方式 是一樣的,都是通過new的方式建立出來的,所以就不敘述了。

引用傳遞和值傳遞的區別

有這麼一道面試題,題目如下 view plain using system public class test1 p.name,num static void a1 person p,intnum public class person 說說上面的程式產生的結果,以及產生這個結果的原因是什麼?我在以...

值傳遞和引用傳遞的區別

以值傳遞引數 當實參當作值來傳遞時,就產生了乙個新的拷貝。class test x static void fo int p p p 1 console.writeline p p 程式執行結果為 p 9,x 8 即x的值不會受p影響,給p賦乙個新值並不會改變x的內容,因為p和x存在於記憶體中不同的...

值傳遞和引用傳遞的區別

值傳遞 值傳遞是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。引用傳遞 引用傳遞是指在呼叫函式時將實際引數的位址傳遞到函式中,那麼在函式中對引數所進行的修改,將影響到實際引數。陣列作為方法引數傳遞時,傳遞的引數是陣列記憶體的位址.陣列作為方法的返...