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.5k
3 个回答
  1. String foo = "a"; String bar = "a";这两个是一份内存空间,都在字符串常量池

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

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

是的,之前定义了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来进行拼接操作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题