值交換
一光酣、基本數(shù)據(jù)類型值交換
class Demo {
public static void change(int a, int b) {
int temp = a;
a = b;
b = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("交換之前:"+"a= "+a+" b= "+b); //交換之前:a= 10 b= 20
change(a,b);
System.out.println("交換之后:"+"a= "+a+" b= "+b); //交換之后:a= 10 b= 20
}
}
換值前后沒有變量的值發(fā)生變化。
原因:
主函數(shù)運(yùn)行的時(shí)候會在棧內(nèi)存中開辟屬于自己的空間廊谓,當(dāng)主函數(shù)調(diào)用change函數(shù)時(shí)古沥,也會在棧內(nèi)存中開辟屬于自己的空間,并有自己的a称诗、b變量萍悴;當(dāng)change方法結(jié)束之后,change方法中的a寓免、b變量也同時(shí)消失癣诱。
重點(diǎn):
1.形式參數(shù)是數(shù)據(jù)所屬函數(shù)的局部變量。
2.不同函數(shù)的局部變量與局部變量是相互獨(dú)立的再榄,沒有任何的關(guān)系狡刘。
基本數(shù)據(jù)類型的值交換.PNG
二、數(shù)組類型值交換
class Demo {
public static void change(int[] arr, int index1,int index2) {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
System.out.println("交換之前:"+Arrays.toString(arr)); //交換之前:[1, 2, 3, 4, 5, 6]
change(arr,1,2);
System.out.println("交換之后:"+Arrays.toString(arr)); //交換之后:[1, 3, 2, 4, 5, 6]
}
}
交換成功困鸥。原因:main方法中與change方法中操作的是同一個(gè)對象嗅蔬。
注意:1.兩個(gè)函數(shù)的arr還是不同的。2.arr這兩個(gè)不同的變量操作了相同的對象疾就,所以交換成功澜术。
數(shù)組類型的值交換
三、對象的值交換
class MyTest{
int x = 10;
public MyTest(int x) {
this.x = x;
}
}
class Demo {
public static void change(MyTest myTest,int x) {
myTest.x = x;
}
public static void main(String[] args) {
MyTest myTest = new MyTest(1);
System.out.println("修改之前:"+myTest.x); //修改之前:1
change(myTest,2);
System.out.println("修改之后:"+myTest.x); //修改之后:2
}
}
交換成功:不同的引用類型變量操作同一個(gè)對象猬腰,肯定會影響到結(jié)果鸟废。
對象的值交換.PNG
四、字符串的值交換
class Demo {
public static void change(String source,String target) {
source = target;
}
public static void main(String[] args) {
String str = "CSDN_HCX";
System.out.println("修改之前:"+str); //修改之前:CSDN_HCX
change(str,"JS_HCX");
System.out.println("修改之后:"+str); //修改之后:CSDN_HCX
}
}
交換失敗
字符串的值交換.PNG