JAVA 字符串能被赋值多次吗

像这样Strings="hello";s="world";字符串难道不是常量吗???不是说不能改变值的吗... 像这样 String s = "hello";
s = "world";
字符串难道不是常量吗???不是说不能改变值的吗
展开
 我来答
帐号已注销
推荐于2017-11-24 · TA获得超过616个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:393万
展开全部
字符串不可改变是指在“字符串本身”上改变
s="world";这个过程是创建一个全新的字符串"world",并将它的引用保存在变量s上.
这里要注意的是,s是用来存储引用的(类似C的指针),它只是告诉你这个东西放在哪里,使用的时候去哪里可以找到.
而"world"才是字符串对象本身.
使用变量s的时候,会进行一次寻址(找到那个字符串在内存中的位置),然后把字符串给你返回出来
而原来的"hello"则仍在内存当中,如果Java虚拟机发现这个内存数据再也不会被使用,则会运行GC(垃圾回收).
追问
那要什么时候才会进行垃圾回收呢?JVM要怎么才会知道我不用了???
追答
因为Java的程序不是解释运行的,所以在程序本身加载的时候就会对你的代码进行一次检查(具体的要参考一下Java虚拟机本身的行为)
理论上是垃圾回收发现内存区空间不足(有其他程序需要使用内存),然后会对过程中产生的变量(生存期较短的,而且没有被其他程序所使用的内存空间,即不存在其他引用)进行清理.
另外,在系统资源比较空闲的时候也会进行垃圾回收,且虚拟机的GC机制执行时间没有固定规律.
详细内容请参考http://zhidao.baidu.com/question/179083298.html?an=0&si=5

参考资料: http://zhidao.baidu.com/question/179083298.html?an=0&si=5

568145421
2011-10-07 · 知道合伙人软件行家
568145421
知道合伙人软件行家
采纳数:1353 获赞数:6756

向TA提问 私信TA
展开全部
你好,你说的是对着,hello的值是不能改变,s只是一个引用,第二句只是将s指向了world这个字符串,hello并没有变。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qch5240
2011-10-09 · 超过21用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:32.9万
展开全部
s="hello" s指向 "hello"这个字符串常量
然后s=“world" 这时s指向"world"这个字符串常量

s不能改变值是指不能在字符串中添加、删除、替换字符
比如你不能在"hello"字符串中添加" world"变成"hello world"但是你可以直接把s赋值成"hello world",即s="hello world"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光旻寒芳洲
2020-06-24 · TA获得超过4003个赞
知道大有可为答主
回答量:3133
采纳率:30%
帮助的人:231万
展开全部
你好,很高兴为你解答。
这段代码的输出是“abc”,这是因为string是一个特殊的类,是一个不可变类。也就是说,一个string一旦new了之后,这个string的值就不会再发生变化。可以从string的源码看出,string类本身是final的,它的所有属性也是final的。
所以,不管你调用了什么函数,输出还是abc。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
574045672
2011-10-07 · TA获得超过546个赞
知道答主
回答量:58
采纳率:0%
帮助的人:43万
展开全部
这个肿么和你说呢。
s ,hello,world是三个独立的对象
当s=“world”的时候只是将s指向了“world”这个对象改变了s中的一个内存指向
并没有改变hello,hello这个对象依然存在并没有改变。world是新生出来的。
当你又实例一个 String w = "hello"的时候 这个hello 其实还是原来的hello 而不用新生一个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式