liuchen’s blog【笔记】java是值传递还是引用传递

结论

    java是按值传递还是按引用传递?其实两种说法都对。对于int、double、char等基本类型,函数传递
传的是值,如果在函数内部改变值不会影响原本的变量。对于其他类型则传递的则是对象的引用的拷贝。如果
通过这个引用拷贝修改对象,是可以生效的,但如果把其他对象赋给这个引用则是不生效的。

案例

    public static void main(String[] args) {
        int i = 1;
        System.out.println(i);
        change(i);
        System.out.println(i);

        String str = new String("123");
        System.out.println(str);
        change(str);
        System.out.println(str);

        StringBuilder sb = new StringBuilder("123");
        System.out.println(sb);
        change(sb);
        System.out.println(sb);
    }

    //基本类型变量传递值,不会修改之前的变量
    public static void change(int i){
        i ++;
    }

    //引用类型传递引用拷贝,对这个拷贝赋值不影响之前的引用
    public static void change(String str){
        str = "abc";
    }

    //通过引用操作对象是起作用的。
    public static void change(StringBuilder sb){
        sb.append("45");
    }

输出:

1
1
123
123
123
12345