值傳遞: 只要是基本類型傳遞 都是值傳遞
引用傳遞:針對於基本類型進行封裝,對封裝進行傳遞,是引用傳遞
代碼:值傳遞(int類型)
public class Test {
public static void main(String[] args) {
int int1 = 10;
int int2 = int1;
System.out.println("int1==" + int1);
System.out.println("int2==" + int2);
int2 = 20;
System.out.println("改變之後");
System.out.println("int1==" + int1);
System.out.println("int2==" + int2);
}
}
運行代碼:得到的當前的結果如下
int1==10
int2==10
改變之後
int1==10
int2==20
Process finished with exit code 0
根據結果會發現int類型的傳遞,當int2值改變的時候,int1的值是沒有任何變化的,所以基本類型都是根據它的值去傳遞的,傳遞之後,int2的值得改變和int1的值已經沒有任何關係了
String類型的傳遞
代碼:
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 = new TestDemo();
testDemo1.setTxtProtected("potected");
TestDemo testDemo2 = testDemo1;
TestDemo testDemo3 = new TestDemo();
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的方式創建出來的,所以就不敘述了。