Java中的空字符串vs空字符串

时间:2014-04-09 06:02:26

标签: java string

我在某些链接上看到,返回字符串比 null 更好,因为它删除了NullPointerException的可能性。

但是,如果我们从内存的角度思考,我认为空字符串会占用一些堆空间,因为它毕竟是一个对象,尽管是空的。那么,考虑到返回 null 而不是字符串并不是更好吗?同样适用于收集,比如说ArrayList

3 个答案:

答案 0 :(得分:5)

有时您想要退回null,有时您不会。它真的取决于你的逻辑。

例如,考虑一个空String表示合法返回值的情况。在这种情况下,如果您在构建某个对象时遇到逻辑错误,则不希望返回字符串,因为它是合法的在您的情况下返回值,因此您可能希望返回null以指示存在某种错误。

例如,考虑你有这个数组:["Dog1", "Dog2", "Cat", " ", ""]并且你想编写一个搜索数组中String的方法:

private String getDog(String dog) {
   for(String str : animals) {
      if(str.equals(dog)) {
         return dog;
      }
   }
   return null;
   //If you return an empty String instead
   //it's already a valid member in that array...
   //it won't be an indication that the String doesn't exist
}

答案 1 :(得分:2)

null宗教战争中,我自己并不认为null与替代品相比是不好的做法,但有些人会这样做。在担心性能之前,我当然会首先考虑设计和API的含义。

那说我不认为记忆是一个问题。 ""intern,并且只有""的一个return ""实例将从堆中存在null的方法。

我不相信它甚至可以无限快地返回非{{1}}引用。

答案 2 :(得分:0)

我不会说返回 null 总是邪恶的,但我个人倾向于避免它。

我们通常使用可选(如果有)。 (来自GuavaJava 8Scala)。

因此,在您的情况下,您可以返回包含某个值的Optional<String>,或者返回Optional.absent()