在Java中字符串的内容可以部分改变吗
2个回答
展开全部
确实,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+123+new
date()这样的操作,那么将创建一个新的string对象来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某一个特定的时刻有java虚拟机回收。
如果希望存放的string可以调整大小,而不是创建新的内存来存放新的对象,可以使用stringbuffer这个类来存放。这个内存可以调整大小。而不会抛弃。
但是你在运算的时候又拆祥发现,你定义的string类型的s变量又是可以进行连接的,如"abc"+"def"最终得到的s的值是"abcdef",这似乎看着string类型的对象又是可以改变的,这是自相矛盾吗?
其实,string对象不允许改变内容是正确的,但是可以改变定义的string类型的变量旅返搏指向,你定义的string
s其实是一个指世磨向string对象的指针,如果不存在对象就为null。
如果你定义了:
string
s="abc";
那么将创建一个内容为"abc"的string对象,并且s指向这个对象。
一旦s=s+123+new
date()这样的操作,那么将创建一个新的string对象来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某一个特定的时刻有java虚拟机回收。
如果希望存放的string可以调整大小,而不是创建新的内存来存放新的对象,可以使用stringbuffer这个类来存放。这个内存可以调整大小。而不会抛弃。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询