java吧 关注:1,270,135贴子:12,775,264
  • 23回复贴,共1

String s =“a”+“b”+“c”;

只看楼主收藏回复

有几个对象啊,答案给了1个对象。。。。。。


IP属地:湖北来自Android客户端1楼2016-12-27 22:19回复
    s是一个对象 所以是1个


    来自iPhone客户端2楼2016-12-27 22:57
    回复
      2025-07-20 04:40:57
      广告


      来自iPhone客户端3楼2016-12-27 22:57
      回复
        那“a”不也是的吗?先创建“a”,发现b没有,就创建“ab”,然后发现c没有,创建“abc”,在加上s,一共不是4个吗?


        IP属地:湖北来自Android客户端4楼2016-12-27 23:36
        收起回复
          首先,string是不可变对象,你的说法是错的,这里就只有一个string对象s


          IP属地:海南来自Android客户端5楼2016-12-28 00:14
          收起回复
            我觉得你的那种说法是对的,楼主,但是那都是没有被明确引用的地址啊,所以应该叫垃圾,是会被垃圾回收器回收的,这么理解和答案能对上


            来自Android客户端6楼2016-12-28 00:19
            收起回复
              jvm在编译时对直接字符串拼接有优化的,编译后就直接是string s="abc",,,如果是string s1="ab" ,string s2=s1+"c",那就是有两个对象


              IP属地:广东来自Android客户端8楼2016-12-28 00:24
              收起回复
                嗯嗯,这个我见过了,之前在看黑马刘意的时候讲过,估计我是忘记了吧,明天我在好好看看,谢谢啊


                IP属地:湖北来自Android客户端9楼2016-12-28 00:28
                回复
                  2025-07-20 04:34:57
                  广告
                  jdk编译优化,不是jvm哦


                  IP属地:浙江来自Android客户端10楼2016-12-28 01:39
                  回复
                    "abc",存在常量池,就一个


                    IP属地:山东来自Android客户端11楼2016-12-28 01:54
                    回复
                      这个没有明确答


                      来自Android客户端12楼2016-12-28 07:54
                      回复
                        jvm有优化,这种等效"~abc"


                        来自Android客户端13楼2016-12-28 08:22
                        回复
                          编译时候会自动优化


                          IP属地:山西来自iPhone客户端14楼2016-12-28 13:57
                          回复
                            编译器处理过后,该语句等效于String s = "abc"
                            如果此时运行时常量池中存在"abc",不会创建对象
                            如果此时运行时常量池中不存在"abc",则会创建"abc"对象
                            注意此时引用变量s还没有被创建


                            15楼2016-12-28 14:13
                            回复