java吧 关注:1,273,027贴子:12,782,529
  • 11回复贴,共1

Java 每日一题:2016年7月27日

只看楼主收藏回复

每天在这里贴一道 Java 题。
问题不难,有 Java 的基本知识就可以做出来。
问题也不偏,日常工作中时不时会碰到。
每日一题索引页:52.36.153.52:8080/javaquestions/

请问应该用哪种方式创建字符串对象?


1楼2016-07-27 12:26回复
    1


    3楼2016-07-27 12:28
    回复
      2025-08-07 20:45:51
      广告
      不感兴趣
      开通SVIP免广告
      弱弱的说一句,我为什么感觉两种都可以呀!


      来自Android客户端5楼2016-07-27 12:32
      回复
        1 2都能吧
        但是1好像先去字符串缓冲区查找有没有一样的,如果有就不创建新的
        2是直接new一个


        IP属地:山东来自Android客户端6楼2016-07-27 12:41
        回复
          1


          IP属地:上海来自手机贴吧7楼2016-07-27 12:45
          回复
            String(String original)
            初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
            API中String的构造方法只有这一个的传参是String的,应该是第一个吧


            IP属地:江苏8楼2016-07-27 13:31
            回复
              应该使用第一种方式。用第二种方式会多创建一个对象。
              Java 使用字符串常量池来保存字符串对象。
              第一种方式会先查找常量池中是否有 “Java” 这个字符串对象,如果有,直接返回指向这个字符串的引用;如果没有,创建 “Java”,然后返回指向这个对象的引用。
              第二种方式不但要在常量池中查找或创建 “World” 字符串,还要在堆中创建一个对象,然后返回指向堆中这个对象的引用。
              看看下面这段程序:

              从 == 和 equals 的比较结果可以看出,str1 和 str2 实际上指向同一个对象,而 str2 指向另一个对象。


              9楼2016-07-27 21:19
              回复
                第二个好因为在java字符串字面量会分享,但在这里是第一个,如果后面有重复使用应该用第二种(你信吗)


                IP属地:安徽来自Android客户端10楼2016-07-27 23:17
                收起回复