
Java,为什么说String为不可变字符串?
Stringa="name";a="age";System.out.print(a);打印结果为a=age,这不是变了吗?...
String a ="name";
a = "age";
System.out.print(a);
打印结果为a=age,这不是变了吗? 展开
a = "age";
System.out.print(a);
打印结果为a=age,这不是变了吗? 展开
展开全部
不可变指的应该是指它的字符序列。你只是从新让a指向了一个新的字符串,并未改变"name"的字符序列。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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),永远无法访问了所以变成了垃圾,等待系统回收。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的a也变了。。。a是对象的引用,是以个地址,要指向某个实体。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于你的问题,String它是一个类,而类是要被实例化才能使用的,当你定义String a的时候,这时a是一个对象,并且将它初始化值。所以在内存上已经占了一个空间了。而当你认为的去改变它的时候,它会在内存空间中重新开辟一个空间,打印出来的是新的空间上的值。但是原来的空间并没有消失,以前那个任然存在,只不过没有输出而已。但对于int 类型的值,它内存空间始终只有一个,你在修改的时候,它会覆盖以前的值。所以,String为不可变字符。不过StringBuffer 这个挺好用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你改变的是指向,从name指向新的地址age
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询