String类是不可改变的,所以你⼀旦创建了String对象,那它的
值就⽆法改变了
字符串常量不可改变确实,Java中的String类型确实是不允许改变其内容的,String类型的对象⼀旦建⽴,将在堆内存当中占据⼀个固定的内存空间,String类型的对象⽆法改变。
但是你在运算的时候⼜发现,你定义的String类型的s变量⼜是可以进⾏连接的,如"abc"+"def"最终得到的s的值是"abcdef",这似乎看着String类型的对象⼜是可以改变的,这是⾃相⽭盾吗?
其实,String对象不允许改变内容是正确的,但是可以改变定义的String类型的变量指向,你定义的String s其实是⼀个指向String对象的指针,如果不存在对象就为null。
如果你定义了:
String s="abc";
那么将创建⼀个内容为"abc"的String对象,并且s指向这个对象。
⼀旦s=s+"abc";这样的操作,那么将创建⼀个新的String对象来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某⼀个特定的时刻有Java虚拟机回收。
如果希望存放的String可以调整⼤⼩,⽽不是创建新的内存来存放新的对象,可以使⽤StringBuffer这个类来存放。这个内存可以调整⼤⼩。⽽不会抛弃。
String字符串内容及在内存中存储的地址值(形如0X2344)不可变
但是字符串变量对对象的引⽤可以改变。
⽰例: String str = "123";
String str2 ="ABC";
str = str2;// 将str2的引⽤赋给str
System.out.println(str);// ABC
不允许在原内存区域上进⾏任何修改
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论