在不创建新实例的情况下将值分配给String类

时间:2013-11-21 12:52:37

标签: java string

对不起,如果这个问题已经被问到或者问题是否已经过去了。

String是一个Class。我们可以将值赋给String而无需创建新的实例对象。

喜欢String someString = "Value";

如果没有为String创建实例,这是如何工作的?是否可以创建用户定义的类来直接分配值而无需创建新对象?

5 个答案:

答案 0 :(得分:3)

请参阅此interesting article

  

字符串非常特殊

     

Java的设计者决定保留原始类型   面向对象的语言,而不是使一切都成为一个对象,所以   至于提高语言的表现。存储基元   在调用堆栈中,它需要更少的存储空间并且更便宜   操纵。另一方面,对象存储在程序中   堆,需要复杂的内存管理和更多的存储空间。   出于性能原因, Java的String被设计在介于a之间   原始和类


此外:

  

Java提供了一种保持String文字的特殊机制    - 在一个所谓的字符串公共池..

当你这样做时:

String myStr1 = "Hello";
String myStr2 = "Hello";

然后

myStr1 == myStr2 true ,因为它们都存储在池中(阅读文章)。

但是如果你构造一个新的 String对象

String myStr1 = new String("Hello");
String myStr2 = new String("Hello");

然后引用相等。

我强烈建议您访问JLS。它说 Strings 以不同的方式处理,就像那样:)

答案 1 :(得分:1)

String str = "abc";

相当于:

 char data[] = {'a', 'b', 'c'};
 or
String str = new String(data);

对于用户定义的类,您必须创建一个对象。 有关更多信息,请参阅文档: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

答案 2 :(得分:0)

字符串是一种特殊情况。 String文字是在the string pool中创建的。在池中添加字符串后,如果将声明具有相同值的字符串,则引用将指向池中的相同字符串。

要回答您的问题,您无法创建用户定义的类而不能使用new。仅当您在该类上仅使用静态方法和字段然后使用时 ClassName.StaticFieldOrMethod

答案 3 :(得分:0)

要了解有关String类如何工作的更多信息,请参阅

http://java.dzone.com/articles/string-memory-internals

答案 4 :(得分:0)

让我们尝试通过一个简单的程序来了解这一点;

package program;

public class TempList {

  public static void main(String[] args) throws Exception {
    String stringWithoutNew = "Test";
    String stringWithoutNew_temp = "Test";

    String stringWithNew = new String("Test");
    String stringWithNew_temp = new String("Test");

    if (stringWithoutNew == stringWithoutNew_temp) {
      System.out.println("This works !!");
    }

    if (stringWithoutNew == stringWithNew) {
      System.out.println("This doesn't work !!");
    }

    if (stringWithNew == stringWithNew_temp) {
      System.out.println("This doesn't work either !!");
    }

  }

}