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