Java的堆、栈和垃圾回收

平常写Android,慢慢忘了很多的Java的基础知识,之后看到一道面试题,其实就是java能否实现像c一样的swap方法

 public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.mainTest();
    }

    public void mainTest(){
        S s1 = new S("s1",10);
        S s2 = new S("s2",20);
        S s3 = new S("s3",30);
        S s4 = new S("s4",40);
        swap(s1.age,s2.age);//1
        System.out.println(s1.age+"----"+s2.age);
        swap(s1,s2);//2
 //     S temp;
 //     temp = s1;
  //    s1 = s2;
  //    s2 = temp;
        System.out.println(s1.age+"----"+s2.age);
        changeName(s3);//3
        System.out.println(s3.name);
        changeName(s4.name);//4
        System.out.println(s4.name);

    }

    public static void swap(int a,int b){
        int temp = a;
        a = b;
        b = temp;
    }
    public static void swap(S a,S b){
        S temp = a;
        a = b;
        b = temp;
    }

    public static void changeName(String name){
        name = "hello world";
    }

    public static void changeName(S s){
        s.name = "bean";
        s = new S();
        s.name = "sam";
    }

    public static class S {

        private String name;
        private int age;
        public S(){}
        public S(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }

问最后打印的是什么,结果是
10—-20
10—-20
bean
s4
虽然我知道java方法传参是传引用,但还是上面标注的2有些不明白。当我将swap方法总的代码直接移到2的位置,又可以交换成功,真心有点不太明白,希望看到博客的那些懂的大神,可以为小弟解惑!
之后去看了很多资料,都说java无法正常像c一样实现swap方法。

之后看到两篇不错的文章,就记录下来,我对java研究不是很深,直接给链接吧,有兴趣的去看看,感谢原博主!
Java中堆内存和栈内存详解
Java垃圾收集器
Java内存管理:深入Java内存区域

猜你喜欢

转载自blog.csdn.net/wxz1179503422/article/details/77720582