Java 我应该在使用变量之前将其初始化为null吗?

Java 我应该在使用变量之前将其初始化为null吗?,java,initialization,Java,Initialization,我看到很多这样的帖子说Java将任何未初始化的变量设置为null(比如,或…) 但最近,我使用了谷歌编写的代码: 我真心希望这样做: // Get the field values long eventID = cur.getLong(PROJECTION_ID_INDEX); long beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); String title = cur.getString(PROJECTION_TITLE_INDEX); 我认

我看到很多这样的帖子说Java将任何未初始化的变量设置为null(比如,或…)

但最近,我使用了谷歌编写的代码:

我真心希望这样做:

// Get the field values
long eventID = cur.getLong(PROJECTION_ID_INDEX);
long beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
String title = cur.getString(PROJECTION_TITLE_INDEX);

我认为谷歌开发者在某种程度上确实是合格的,所以我想知道,既然我们在同一个范围内:宣布第一种方式而不是第二种方式的利弊是什么?

这是一个风格问题。我没有不必要的初始化,原因有二:

  • 这样做会破坏Java编译器将给您的额外检查,因为如果遇到未在所有控制路径上初始化的变量,编译将不会成功

  • 它给人的印象是,
    null
    是引用的可接受值,但通常不是


  • 我想说,这是一个风格的问题,以及基于公司标准(甚至个人标准)的编程风格应该是什么样子。对他们来说,这可能更具可读性。但在我看来,这个问题最终是基于观点的,而不是那些帖子所说的。Java仅将未初始化的成员变量和静态变量设置为null。这不适用于局部变量。当我在70年代学习编程时,我使用的是Pascal语言,当时需要将变量的声明与使用分开。我有时仍然会看到一种风格发展到那时,并继续下去(尽管越来越少)。在像Java这样的现代编程语言中,我个人的品味显然是你的版本胜过谷歌的版本,不管我多么同意谷歌的开发者通常都是非常合格的。@khelwood那么这两种说法之间有什么区别呢?那么,它们的利与弊是什么呢?第三点,初始化为某些
    null
    或默认值不允许将这些变量设置为final我同意你所说的不建议初始化为null的原因,但我认为如果你声称“这是一个风格问题”您应该能够指出至少一个您希望初始化为null的原因。除了满足编译器无法静态推断的明确赋值要求外,我想不出一个好的理由;这不是风格的问题,这是为了满足语言的要求。第四点可能是:这样做会隐藏
    if/else
    块中的不完整初始化,其中变量没有在一个可能的路径中初始化。在这种情况下,编译器会在没有事先初始化的情况下引发编译时错误。
    // Get the field values
    long eventID = cur.getLong(PROJECTION_ID_INDEX);
    long beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
    String title = cur.getString(PROJECTION_TITLE_INDEX);