【Java】值传递与引用传递 & 不可变类

代码:

public class Test {

    public void change(char c, char ch[], Character character, String string) {
        c = '!';
        ch[0] = '!';
        character = '!';
        string = "!!!";
    }

    public static void main(String args[]) {
        char c = 'a';
        char[] ch = {'a', 'b', 'c'};
        Character character = new Character('a');
        String string = new String("abc");

        Test ex = new Test();
        ex.change(c, ch, character, string);
        System.out.println(c);
        System.out.println(ch);
        System.out.println(character);
        System.out.println(string);
    }

}

八大基本数据类型为值传递,除此之外,任何类都是引用传递,包括数组。 值传递方式传递的是副本,因此变量c本身不会改变;引用传递方式传递的是对象的引用,对形参的修改会使对象本身发生改变,因此数组ch会改变。

八大基本类型的包装类,以及String类,都是不可变类。一旦被创建,就不能被修改。 所以及时是引用传递,也不会改变。

程序运行结果如下:
在这里插入图片描述
StringBuilder是可变类,可以被修改。我们熟知的 String string = new String(“abc”); string += “def”; 实际上会创建一个新的内存并存放 “abcdef” ,string会指向新的字符串内存,而之前 字符串 “abc” 不会消失直至被垃圾回收器回收,因此会影响程序的运行效率。

发布了15 篇原创文章 · 获赞 1 · 访问量 1672

猜你喜欢

转载自blog.csdn.net/weixin_43465579/article/details/96463536
今日推荐