基本数据类型交换
案例:
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年4月20日19:02:38
* Desc:值交换:调用一个方法的时候,传递给方法的参数,实际上传递的只是变量所存储的值。
*/
classDemo51
{
publicstaticvoid main(String[] args)
{
int a =3, b =4;
System.out.println("交换前的值a:"+ a +" b: "+ b);
changeValue(a, b);
System.out.println("交换后的值a:"+ a +" b: "+ b);
}
//需求1:定义一个函数交换两个基本类型变量的值
publicstaticvoid changeValue(int a,int b){
int temp = a;
a = b;
b = temp;
}
}
结果:交换失败
分析:
小结:
主函数运行的时候会在栈内存中开辟属于自己的空间,当主函数调用changeValue函数的时候,也会在栈内存中开辟属于自己的空间,并有自己的a,b变量。当changeValue方法结束之后,changeValue方法中的a,b变量也会同时消失。
1.形式参数是数据所属函数的局部变量
2.不同函数的局部变量与局部变量时相互独立的,没有任何关系
数组类型交换
案例:
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年4月20日19:02:38
* Desc:值交换:调用一个方法的时候,传递给方法的参数,实际上传递的只是变量所存储的值。
*/
import java.util.*;
classDemo51
{
publicstaticvoid main(String[] args)
{
int[] arr ={33,10,42};
System.out.println("交换前的值:"+Arrays.toString(arr));
changeArr(arr,1,2);
System.out.println("交换后的值:"+Arrays.toString(arr));
}
//需求2:定义一个函数交换数组中的两个元素的位置
publicstaticvoid changeArr(int[] arr,int index1,int index2){
int temp = arr[index1];
arr[index1]= arr[index2];
arr[index2]= temp;
}
}
结果:交换成功
分析:
小结:
1.两个函数的arr还是不同的变量,但是指向同一对象
2.arr这两个不同的变量只不过是操作了相同对象,所以才导致修改成功。
对象的值交换
案例:
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年4月20日19:02:38
* Desc:值交换:调用一个方法的时候,传递给方法的参数,实际上传递的只是变量所存储的值。
*/
import java.util.*;
classPerson
{
int x =10;
}
classDemo51
{
publicstaticvoid main(String[] args)
{
Person person =newPerson();
changObj(person,20);
System.out.println("x="+ person.x);
}
//需求3:定义一个函数交换对象中的两个元素的位置
publicstaticvoid changObj(Person person,int x){
person.x = x;
}
}
结果:
分析:
小结:
如果是不同的引用类型变量操作同一个对象,那么肯定会影响到结果。