我应该将初始的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实际上是一个正确的默认值,是否有意义有一个默认值呢?

如果答案是肯定的,则在声明中将其设置为“”是正确的。 如果没有,这是一个让错误难以发现和诊断的秘诀。

一般来说最好避免这种情况。 几个原因:

  1. 获得NullPointerException通常是一个很好的警告,您应该在使用variables之前,或者忘记设置它。 将它设置为一个空string将摆脱NullPointerException,但可能会导致一个不同的(而且更难以追踪)在程序中的进一步错误。

  2. 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。

没门。 你为什么想这样做? 这将会导致不正确的结果。 空值和“”“不一样。