Java,为什么说String为不可变字符串?

Stringa="name";a="age";System.out.print(a);打印结果为a=age,这不是变了吗?... String a ="name";
a = "age";
System.out.print(a);
打印结果为a=age,这不是变了吗?
展开
 我来答
zxc_20111206
2012-04-11 · 超过12用户采纳过TA的回答
知道答主
回答量:184
采纳率:0%
帮助的人:54.3万
展开全部
不可变指的应该是指它的字符序列。你只是从新让a指向了一个新的字符串,并未改变"name"的字符序列。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
abcd_sanbian
2012-04-14 · TA获得超过449个赞
知道答主
回答量:76
采纳率:0%
帮助的人:63.7万
展开全部
String类型每进行一次操作就会new一个新对象。String a ="name"是这样子的:new一个对象,内容是“name”,放在地址A1处,让变量a指向这个A1地址。a = "age":new一个新对象,内容是“age”,放在一个新地址A2,让变量a指向A2。结果打印出来的自然是“age”了。这个时候地址A1处的内容还是“name”,没有变(String为不可变字符串是指这个意思)。另外,这个时候地址A1处的对象(“name”)由于没有变量指向它(变量a已经指向A2),永远无法访问了所以变成了垃圾,等待系统回收。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4a70876
2012-04-05
知道答主
回答量:26
采纳率:0%
帮助的人:14.8万
展开全部
你的a也变了。。。a是对象的引用,是以个地址,要指向某个实体。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
还是不用心
2012-04-01
知道答主
回答量:42
采纳率:0%
帮助的人:20.8万
展开全部
对于你的问题,String它是一个类,而类是要被实例化才能使用的,当你定义String a的时候,这时a是一个对象,并且将它初始化值。所以在内存上已经占了一个空间了。而当你认为的去改变它的时候,它会在内存空间中重新开辟一个空间,打印出来的是新的空间上的值。但是原来的空间并没有消失,以前那个任然存在,只不过没有输出而已。但对于int 类型的值,它内存空间始终只有一个,你在修改的时候,它会覆盖以前的值。所以,String为不可变字符。不过StringBuffer 这个挺好用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
超级7yw
2017-04-03 · TA获得超过255个赞
知道小有建树答主
回答量:379
采纳率:14%
帮助的人:90.6万
展开全部
你改变的是指向,从name指向新的地址age
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式