【Java学习笔记】解惑:string类型变量“不可变”?

    xiaoxiao2021-03-25  77

    我们说,string 变量是final的,不可修改的,那么初学者遇到下面这段代码,可能就会产生疑问了

    public class StringTest { public static void main(String args[]) { String a = "你好!" ; System.out.println(a) ; a = "hello!" ; System.out.println(a) ; } }

    你会发现“你好”和“hello”都被打印出来了。

    其实,String对象不可修改指的是对象本身不可修改,而不是引用不可修改。String a = "你好";这行代码的意思是声明一个String类型的引用变量叫做a,在内存中创建一个String对象(值为"你好"),然后把这个对象的引用赋值给变量a。a = "hello";这行代码执行的效果是在内存中另外创建了一个String对象(值为"hello"),然后把这个新对象的引用赋值给变量a,而不是把原来的内存中的那个“你好”的String对象值变为“hello”。如果之后内存中那个“你好”的String对象没有任何引用,那么就会被下一次垃圾回收器运行时回收。String和所有的基本类型包装类的对象都是不变量。内存中的不变量对象的值是不能被改变的。

    整理自网络

    转载请注明原文地址: https://ju.6miu.com/read-17849.html

    最新回复(0)