在java中使用这些字符串有什么区别吗?

在java中使用这些字符串有什么区别吗?,java,string,Java,String,在我的程序中,我使用字符串,如下所示: 字符串s1=null;和 字符串s1=新的钉扎; 对于后面的第一个字符串,我将更改s1=演示测试。谁能告诉我哪条路最好用绳子 是完全没有意义的,因为您所做的只是创建一个额外的字符串实例,稍后将丢弃该实例 String s1 = null; 可以,但如果在使用正确的值初始化变量之前未使用该变量,则不需要。 简单的 String s1; 通常可以。第二个选项 String s1=new Sting(); 将创建一个新的空字符串。这可能需要更多的内存

在我的程序中,我使用字符串,如下所示:

字符串s1=null;和 字符串s1=新的钉扎; 对于后面的第一个字符串,我将更改s1=演示测试。谁能告诉我哪条路最好用绳子

是完全没有意义的,因为您所做的只是创建一个额外的字符串实例,稍后将丢弃该实例

String s1 = null; 
可以,但如果在使用正确的值初始化变量之前未使用该变量,则不需要。 简单的

String s1;  
通常可以。第二个选项

String s1=new Sting();
将创建一个新的空字符串。这可能需要更多的内存和CPU时间,但除非您执行相同的操作数万亿次,否则不会注意到差异

另一方面,在第二个选项中,字符串是存在的,您可以使用它进行操作,例如,将另一个字符串连接到它:

s1 = s1 + " bla bla";
如果使用第一个选项:

String s1=null;
s1 = s1 + " bla bla";
你会得到一个NullPointerException


除此之外,我看不出任何区别。

我的理解是,当您使用新字符串创建字符串对象时,它会创建一个空字符串

参见Java文档

公共字符串初始化新创建的字符串对象,以便 表示空字符序列。请注意,使用 构造函数是不必要的,因为字符串是不可变的


当您使用字符串s1=null时;但是,它会创建一个不指向任何内容的字符串变量。因此,您不能像s1一样调用它。length这会导致NullPointerException,直到您实际为s1赋值。

如果您要修改循环中的字符串或条件情况,并且需要括号外的结果,则可能需要使用字符串s1=null

例如:

boolean test = true;
String s1 = null;
if (test) {
   s1 = "true";
} else {
   s1 = "false";
}
System.out.println("Results is: " + s1);

如果在条件之前未将s1定义为null,则在打印字符串s1时将出现错误。

字符串s1=null;在方法范围内。@Peter:不,肯定不是。我添加了更多信息,希望能澄清。
boolean test = true;
String s1 = null;
if (test) {
   s1 = "true";
} else {
   s1 = "false";
}
System.out.println("Results is: " + s1);