我应该将初始的javastring值从null设置为“”?
我经常有一个class级:
public class Foo { private String field1; private String field2; // etc etc etc }
这使得field1和field2的初始值等于null。 将所有我的string类字段如下更好?
public class Foo { private String field1 = ""; private String field2 = ""; // etc etc etc }
然后,如果我符合类定义,我会避免大量的空指针问题。 这种方法有什么问题?
我不同意其他海报。 使用空string是可以接受的。 我更喜欢尽可能使用它。
在绝大多数情况下,空string和空string表示完全相同的东西 – 未知数据。 无论是用空string还是空string表示,都是一个select问题。
这种方式是疯狂(通常)。 如果你遇到很多空指针问题,那是因为你在实际填充它们之前试图使用它们。 这些空指针问题是大声讨厌的警告警报告诉你在哪里使用,让你然后进入并解决问题。 如果你刚刚把它们设置为空,那么你将冒着使用它们的风险,而不是你实际上期待的。
绝对不。 一个空string和一个空string是完全不同的东西,你不应该混淆它们。
进一步解释:
- “null”的意思是“我没有初始化这个variables,或者它没有任何价值”
- “空串”的意思是“我知道价值是什么,它是空的”。
正如Yuliy已经提到的那样,如果你看到很多空指针exception,那是因为你期望的东西有价值的时候他们不这样做,或者你在使用它们之前对事物进行初始化时是马虎的。 无论是哪种情况,都应该花时间进行正确的编程 – 确保应该有价值的事物具有这些价值观,并确保如果您访问的是可能没有价值的事物的价值,那么您将其考虑在内。
在某个特定的情况下,在设置其他位置之前使用的值是否真的有意义,并且在这种情况下performance为空string? 即是一个空string实际上是一个正确的默认值,是否有意义有一个默认值呢?
如果答案是肯定的,则在声明中将其设置为“”是正确的。 如果没有,这是一个让错误难以发现和诊断的秘诀。
一般来说最好避免这种情况。 几个原因:
-
获得NullPointerException通常是一个很好的警告,您应该在使用variables之前,或者忘记设置它。 将它设置为一个空string将摆脱NullPointerException,但可能会导致一个不同的(而且更难以追踪)在程序中的进一步错误。
-
null和“”之间可以有一个有效的区别。 空值通常表示没有设置值或值是未知的。 一个空string表示它被故意设置为空。 根据你的程序,这种微妙的差异可能是重要的。
我也不会build议。
相反,你应该给你的领域明智的价值观。 如果他们不必改变,我会让他们最终。
public class Foo { private final String field1; private final String field2; public Foo(String field1, String field2) { this.field1 = field1; this.field2 = field2; } // etc. }
没有必要分配,我还没有初始化,但价值。 只要给它初始值。
我知道这是一个老问题,但我想指出以下内容:
String s = null; s += "hello"; System.out.println(s);// this will return nullhello
而
String s = ""; s += "hello"; System.out.println(s); // this will return hello
显然,真正的答案是,应该使用StringBuffer而不是仅仅连接string,但是我们都知道,对于一些代码来说,连接起来更简单。
我会避免这样做,你需要知道你的实例没有正确填充数据。
我想当你使用String s = null的时候,它只会在堆栈上创buildvariables“s”,堆中不会有对象存在,但是只要你声明的东西就像String s =“”; 它会做什么就像它会创build堆上的对象。因为我们知道string是不可变的,所以每当你将stringvariables分配新的值每次它将在堆上创build新的对象…所以我认为strings = null比String s =“”更高效;
build议欢迎!!!!!
Null更好,这就是为什么它们被称为未检查的exception{空指针exception}。 当抛出exception时,它会告诉你在调用它的任何方法之前,必须将它初始化为非null值。
如果你这样做
私人stringfield1 =“”;
你试图抑制错误。 以后很难find这个bug。
没门。 你为什么想这样做? 这将会导致不正确的结果。 空值和“”“不一样。