我应该在使用它们之前将我的变量初始化为null吗?

Dan*_*iel 3 java initialization

我看到很多SO帖子说Java将任何未初始化的变量设置为null(就像这里,这里这里 ......).

但最近,我去当这个代码,由谷歌写在这里:

cur =  cr.query(builder.build(), INSTANCE_PROJECTION, selection, selectionArgs, null);
while (cur.moveToNext()) {
    String title = null;
    long eventID = 0;
    long beginVal = 0;

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

    // Do something with the values.
    ...
}
Run Code Online (Sandbox Code Playgroud)

我真的宁愿这样做:

// 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);
Run Code Online (Sandbox Code Playgroud)

我认为Google开发人员在某种程度上是合格的,所以我想知道,因为我们处于同一范围:宣布第一种方式而不是第二种方式的优缺点是什么?

Bat*_*eba 7

这是一个风格问题.我没有不必要地初始化,原因有两个:

  1. 如果遇到未在所有控制路径上初始化的变量,那么Java编译器将为您提供额外检查,因为编译将不会成功.

  2. 它给人的印象null是参考的可接受值,通常它不是.

  • 对于第三点,初始化为某些"null"或默认值不允许将这些变量设置为"final" (8认同)
  • 我同意你为什么不建议将其初始化为null的原因,但我认为如果你声称"这是一个风格问题",你应该能够指出至少一个原因,你可能想要初始化为空值.我不能想出一个很好的理由,除了满足编译器无法静态推断的明确的赋值要求; 这不是风格问题,而是满足语言的要求. (3认同)