0
点赞
收藏
分享

微信扫一扫

值交换


基本数据类型交换

案例:

/**
* 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;
}
}


结果:交换失败


值交换_局部变量


分析:


值交换_局部变量_02


小结:


主函数运行的时候会在栈内存中开辟属于自己的空间,当主函数调用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;
}
}



结果:交换成功


值交换_类型变量_03


分析:


值交换_局部变量_04




小结:


    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;
}

}


结果:


值交换_java_05


分析:


值交换_java_06


小结:


    如果是不同的引用类型变量操作同一个对象,那么肯定会影响到结果。

举报

相关推荐

0 条评论