Mar*_*ark 47 java string null initialization
我常常有一个班级:
public class Foo
{
private String field1;
private String field2;
// etc etc etc
}
Run Code Online (Sandbox Code Playgroud)
这使得field1和field2的初始值等于null.拥有我的所有String类字段会更好吗?
public class Foo
{
private String field1 = "";
private String field2 = "";
// etc etc etc
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我与类定义一致,我会避免很多空指针问题.这种方法有什么问题?
Yul*_*liy 73
那种方式就是疯狂(通常).如果您遇到很多空指针问题,那是因为您在实际填充它们之前尝试使用它们.那些空指针问题是响亮的令人讨厌的警告警报,告诉你这个用途在哪里,让你进入并解决问题.如果您最初将它们设置为空,那么您将冒险使用它们而不是您实际期望的那些.
Pau*_*lin 51
绝对不.空字符串和空字符串是完全不同的东西,你不应该混淆它们.
进一步解释:
正如Yuliy已经提到的那样,如果你看到很多空指针异常,那是因为你希望事物在它们不存在时具有值,或者你在使用它们之前对于初始化事物感到邋..在任何一种情况下,您都应该花时间进行正确的编程 - 确保应该具有值的内容具有这些值,并确保如果您访问可能没有值的内容的值,则考虑到这一点.
在特定情况下,在将其设置到其他位置之前使用的值是否真的有意义,并且在这种情况下表现为空字符串?ie是一个空字符串实际上是一个正确的默认值,并且有一个默认值是否有意义?
如果答案是肯定的,那么在声明中将其设置为""是正确的.如果没有,这是一个让bug更难找到和诊断的方法.
我不同意其他海报.使用空字符串是可以接受的.我希望尽可能使用它.
在绝大多数情况下,null String和一个空String表示完全相同的东西 - 未知数据.无论您使用null还是空字符串表示,都是一个选择问题.
一般来说,最好避免这种情况.有几个原因:
获取NullPointerException通常是一个很好的警告,您应该在应用之前使用变量,或者您忘记设置变量.将它设置为空字符串将消除NullPointerException,但可能会导致程序中的行更远(并且更难以跟踪)错误.
null和""之间可以有一个有效的区别.空值通常表示未设置任何值或值未知.空字符串表示故意将其设置为空.根据您的计划,这种微妙的差异可能很重要.
小智 7
我知道这是一个老问题,但我想指出以下几点:
String s = null;
s += "hello";
System.out.println(s);// this will return nullhello
Run Code Online (Sandbox Code Playgroud)
然而
String s = "";
s += "hello";
System.out.println(s); // this will return hello
Run Code Online (Sandbox Code Playgroud)
显然,真正的答案是应该使用 StringBuffer 而不是仅仅连接字符串,但众所周知,对于某些代码,连接更简单。
我不建议。
相反,您应该为您的字段提供合理的值。如果他们不必改变,我会让他们成为最终的。
public class Foo {
private final String field1;
private final String field2;
public Foo(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
// etc.
}
Run Code Online (Sandbox Code Playgroud)
无需分配,我尚未初始化值。只需给它初始值。
| 归档时间: |
|
| 查看次数: |
74321 次 |
| 最近记录: |