java吧 关注:1,296,638贴子:12,831,431
  • 25回复贴,共1

求解一个小问题关于String的

只看楼主收藏回复

String s=“a”;
s+="b";
问:是否创建了一个新的对象(String s="a")以后
解释的能否详细点


1楼2012-08-23 22:25回复
    一共是两个对象


    IP属地:江苏2楼2012-08-23 22:26
    收起回复
      2026-02-02 10:26:58
      广告
      不感兴趣
      开通SVIP免广告
      我看二楼来的


      IP属地:山东来自Android客户端3楼2012-08-23 22:32
      收起回复
        不要纠结这个问题了
        这个问题根本不严谨
        问题一:
        代码不完整
        问题二:
        没有指明是哪个版本,哪个系统下的 JDK
        所以答案只能是:不确定


        IP属地:江苏4楼2012-08-23 22:42
        收起回复
          不同的虚拟机对字符串的处理可能稍有不同,sun的jvm是在StringPool中创建了两个对象一个对象的内容是"a",另一个是"ab"


          IP属地:湖北6楼2012-08-23 22:49
          收起回复
            刚才看了一下 ,如果真有这种公司给你出面试题,基本上是这样作答,
            如果 String池里没有"a"那么就要创建一个String实例"a" 如果没有"b"那么创建一个String实例"b"由于在java中字符串的拼接会被优化成
            s = new StringBulider(s).append("a")
            所以产生第三个实例。也就是说在String池里没有需要的实例的时候会产生三个实例。
            


            IP属地:江苏7楼2012-08-24 00:18
            回复
              “a”之类的不是代表一个字符串常量么


              IP属地:广东来自iPhone客户端8楼2012-08-24 01:23
              回复
                与其纠结这种问题,不如研究一下“为什么把 String 设计为 immutable 的类”


                IP属地:澳大利亚9楼2012-08-24 07:07
                回复
                  2026-02-02 10:20:58
                  广告
                  不感兴趣
                  开通SVIP免广告
                  我就喜欢这种小白的问题,高端的看不懂


                  IP属地:上海10楼2012-08-24 10:30
                  回复