美文网首页程序员Java
Java中的值交换

Java中的值交换

作者: 我可能是个假开发 | 来源:发表于2018-12-13 17:13 被阅读12次

    值交换

    一、基本数据类型值交换

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

    换值前后没有变量的值发生变化。
    原因:
    主函数运行的时候会在栈内存中开辟属于自己的空间,当主函数调用change函数时,也会在栈内存中开辟属于自己的空间,并有自己的a、b变量;当change方法结束之后,change方法中的a、b变量也同时消失。

    重点:
    1.形式参数是数据所属函数的局部变量。
    2.不同函数的局部变量与局部变量是相互独立的,没有任何的关系。

    基本数据类型的值交换.PNG

    二、数组类型值交换

    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方法中操作的是同一个对象。

    注意:1.两个函数的arr还是不同的。2.arr这两个不同的变量操作了相同的对象,所以交换成功。

    数组类型的值交换

    三、对象的值交换

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

    交换成功:不同的引用类型变量操作同一个对象,肯定会影响到结果。

    对象的值交换.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

    相关文章

      网友评论

      本文标题:Java中的值交换

      本文链接:https://www.haomeiwen.com/subject/xbubhqtx.html