【问题标题】:What is the difference between strings allocated using new operator & without new operator in java J2ME?java J2ME中使用new运算符分配的字符串和没有new运算符的字符串有什么区别?
【发布时间】:2011-08-05 06:56:56
【问题描述】:

有什么区别

String str=new String("Thamilan");

String str="Thamilan";

在 java J2ME 中。

【问题讨论】:

    标签: java java-me


    【解决方案1】:

    在第一种情况下,总是会创建新对象,在第二种情况下,可以重用来自字符串池的对象。在此处阅读有关字符串池的更多信息:What is String pool?

    【讨论】:

      【解决方案2】:

      不同的是,新的String创建了一个与传入的字面值相同的新对象:

          String s = "abc";
          String t = new String("abc");
      
          System.out.println(s==t); //false
      
          String u = "abc";
          String v = "abc";
      
          System.out.println(u==v);  //true
      

      这是因为文字总是来自内部池。

      你可能想看看实习生方法 - 这是它的描述:

      返回字符串对象的规范表示。 一个字符串池,最初是空的,由 String 类私下维护。 当调用 intern 方法时,如果池中已经包含一个等于该 String 对象的字符串,该字符串由 equals(Object) 方法确定,则返回池中的字符串。否则,将此 String 对象添加到池中并返回对该 String 对象的引用。 因此,对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为真时,s.intern() == t.intern() 才为真。 所有文字字符串和字符串值的常量表达式都是实习的。字符串文字在 Java 语言规范的第 3.10.5 节中定义

      【讨论】:

        【解决方案3】:

        Java String declaration的回答

           String str = new String("SOME") 
        

        总是在堆上创建一个新对象

            String str="SOME"  
        

        使用字符串池

        试试这个小例子:

            String s1 = new String("hello");         
            String s2 = "hello";
             String s3 = "hello";
              System.err.println(s1 == s2);
             System.err.println(s2 == s3); 
        

        为避免在堆上创建不必要的对象,请使用第二种形式。

        【讨论】:

          【解决方案4】:
          1. String t = new String("abc"); 语句 1 将在堆上创建一个对象,并在池中另外放置一个具有相同值的字符串字面量。

          引用变量 t 将引用堆上的对象。

          1. String t = "abc";

          但是,如果池中不存在具有相同值的对象,则语句 2 只会在字符串常量池中创建一个对象,并且 t 将引用放置在字符串常量池中的对象。

          【讨论】:

          • 这些是相互矛盾的陈述。你的意思是说 String t = new String("abc");和字符串 t = "abc";都将指向字符串池中的同一个字符串对象??
          【解决方案5】:

          在“Effective Java”中,它说永远不要编写这样的代码:

          String s = new String("string");
          

          因为它创建了不必要的 String 对象。但它应该这样写:

          String s = "string";
          

          【讨论】:

          • 好的,但问题是,它们之间有什么区别?
          猜你喜欢
          • 2013-06-05
          • 2011-05-24
          • 1970-01-01
          • 1970-01-01
          • 2011-03-16
          • 2015-04-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多