java的字面量的内存是不可变的麽?
天蓬老师
天蓬老师 2017-04-17 16:19:00
[Java讨论组]

譬如 

String foo= "a";
String bar= "a";

那么,在上面的这个栗子中,两个"a"本身是统一份内存空间麽?

如果String foo="a" + "b"
如果String bar="ab"

这里是否存在运算,先计算出"a"+"b"的字面量(“ab”),初始化"ab“ 后,接下来的任何

String x="ab",都是对之前"ab"的字面量的引用持有呢?


Update
String foo="a" + "b" 这条语句,假设在之前没有"a"和”b“的init.那么在这里创建了
”a“,"b","ab"呢
还是只创建了"ab"呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网
  1. String foo = "a"; String bar = "a";这两个是一份内存空间,都在字符串常量池

  2. String foo="a" + "b",String bar="ab";这两个也是,"a" + "b"在编译期就会被优化为"ab"

  3. String foo="a" + "b"只创建了“ab”,同上

PHP中文网

参考 http://lavasoft.blog.51cto.com/62575/80034/

PHP中文网

是的,之前定义了String bar="ab",后面再定义String x="ab",此时bar和x都指向同一个对象。
除非你使用new String("ab")。

对于这个问题:
String foo="a" + "b" 这条语句,假设在之前没有"a"和”b“的init.那么在这里创建了
”a“,"b","ab"呢
还是只创建了"ab"呢?
答案肯定是创建了3个字符串对象,"a","b","ab"。所以频繁的进行字符串拼接操作会浪费内存,需要使用StringBuffer或者StringBuilder来进行拼接操作。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号