Java String方法(本地)变量应该初始化为null还是“”?

初始化String方法(本地)变量以避免Java中的“变量可能尚未初始化”错误的最佳实践是什么?

String s = null; 或String s =“”;

这有什么不同吗? 如果是这样,哪一个更好,为什么?

我在网上看到了相互矛盾的答案。

谢谢!

是的,它有所不同。 一个是对空字符串的引用,一个是空引用。 他们不一样。

哪个更好? 这取决于你是想要一个空值还是一个空字符串的引用…它们的行为不同,所以选择一个行为方式你想要它。

我很少需要为变量分配一个“虚拟”值 – 通常只是在声明点用我想要的实际值初始化变量就可以了。 如果您可以提供更多上下文,我们可以帮助您更好地构建代码,这对您来说不是问题。

最佳做法是尽可能多地创建最终字段,或使用默认值来避免客户端实例化不良或不完整的对象。 如果默认情况下字段是空字符串是有意义的(即它不会冒错误的风险),那么一定要这样做。 否则,当客户端在未正确实例化的对象上调用方法时,至少null将引发exception。

因此,通常,尝试强制客户端代码在构造期间创建完整的对象。 如果你不知道字符串在构造时应该是什么,那么让它们作为参数传递给它。 如果字符串仅用于内部逻辑,则它可能更好地作为局部变量或参数 – 在这种情况下,我通常更喜欢null到“”因为== null比isEmpty()更明确。

这一切都取决于你希望你的程序做什么。 有时,查看是否已经设置了一个字符串是有用的,其中null最好。 其他时候你想要防止NullPointers更好。

我更喜欢将Java中的String初始化为“”,纯粹是因为我试图避免使用空指针。 空指针增加了很多开销,可以通过分配“”而不是null来删除。

这真的取决于你在你的计划中做了什么。

“”(空字符串)仅与String连接,它比null更安全。 当您从String类调用方法时,例如:replaceAll(),indexOf()程序将正常工作, 但是当您有null时,您在调用方法时始终有NullPointerException。

考虑应用程序中的字符串空值是否对您不利,然后选择str =“”。

请注意,抛出NullPointerException时通常会更好,因为我们知道应用程序中的无效状态,因此当您想要知道此set String默认为null时。

通常我会说:在声明它时,根本不初始化你的局部变量,如果它是一个虚拟值,如""null 。 把真正的价值放进去,或者等到你能把它放进去。

然后,编译器将确保在任何可能的变量使用之前至少有一个赋值。 只有少数情况下编译器不够聪明才能弄明白(因为它需要本地不可用的信息)我会使用一些初始化,然后通常为null更好,因为当我错误时它会显示NullPointerException 。 (我可能会在我认为应该执行初始化以强制执行此操作之后添加一个assert s != null 。)