在java中,String可以通过以下两种方式创建
String foo="Test";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)
...即便如此,我也倾向于发现它有点怀疑,并会探索其他方法来做到这一点.
这是从来没有必要建立一个新的String对象与
String fooobj = new String("Test");
Run Code Online (Sandbox Code Playgroud)
所以,你永远不应该这样做.只需写下来String fooobj = "Test";.
类String是不可变的.这意味着String对象的内容在构造之后无法更改.永远不必创建字符串文字的显式副本.