字符串文字与Java中的String对象

ked*_*the 3 java string

在java中,String可以通过以下两种方式创建

  1. String foo="Test";
  2. String fooobj=new String("Test");

在这里,我们提到了这两种创建String的方式之间的区别.我想更多地了解什么是适当的场景,我们应该去哪里

  String foo="Test";
Run Code Online (Sandbox Code Playgroud)

什么时候去

 String fooobj=new String("Test");  ?
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 11

简短的回答:如果你有任何疑问,你不需要new String("literal here").如果你需要它,你会知道你需要它,为什么.

答案很长:

基本上你唯一想要使用的时间new String("literal here")是你想要确保结果字符串对象不是==任何其他字符串对象.文字自动实习 ; 通过创建的字符串new String("literal here")不是.

那么你为什么要这样呢?答案是你几乎永远不会,因为String实例是不可变的,所以你不在乎你是否String与其他东西共享一个实例.几乎我可以想象的唯一场景是,如果你有一个接受a的API String并且你想要一个除了之外的标志值null,并且你想通过这样检查那个标志/标记值==:

public static final String MARKER = new String("Marker");
public void someFictionalMethod(String arg) {
    if (arg == MARKER) {
        // Take action on the marker
    }
    else {
        // Take action on the string
    }
}
Run Code Online (Sandbox Code Playgroud)

...即便如此,我也倾向于发现它有点怀疑,并会探索其他方法来做到这一点.


Jes*_*per 7

这是从来没有必要建立一个新的String对象与

String fooobj = new String("Test");
Run Code Online (Sandbox Code Playgroud)

所以,你永远不应该这样做.只需写下来String fooobj = "Test";.

类String是不可变的.这意味着String对象的内容在构造之后无法更改.永远不必创建字符串文字的显式副本.