将int初始化为0或不?

时间:2016-04-26 01:57:25

标签: java android primitive-types

在android源代码中,我看到他们将四个变量定义为

protected int mPaddingRight = 0;
protected int mPaddingLeft = 0;
protected int mPaddingTop;
protected int mPaddingBottom;

在Java中,将变量初始化为0的区别是什么?我不明白,在某些编译器中,除非我初始化字段,否则我无法进行比较。但这不是这种情况。这与优化有关吗?或者这只是不一致/不良的编码实践?

5 个答案:

答案 0 :(得分:16)

根据Java primitive data types turorial,所有原始数据类型都有一个默认值。所以初始化是隐含的。一个好的做法:在使用之前初始化值以防止意外行为。

byte    0
short   0
int 0
long    0L
float   0.0f
double  0.0d
char    '\u0000'
String (or any object)      null
boolean false

答案 1 :(得分:1)

如评论中所述,没有差别。它们将被隐含地用0来初始化。但是,如果您使用优质IDE或使用其他工具,则可以非常轻松地使用= 0;搜索和替换= SomeOtherValueHere;

此外,我认为在您访问变量之前始终初始化变量是一种很好的做法。

答案 2 :(得分:1)

初始化变量是一种很好的编码实践。

来自Oracle Docs:

  

声明字段时并不总是需要指定值。   声明但未初始化的字段将设置为a   编译器合理默认。一般来说,这是默认的   将为零或null,具体取决于数据类型。依靠这样的   但是,默认值通常被认为是错误的编程   风格。

初始化变量的好处如下:

  1. 让您更轻松地遵循您的代码
  2. 使静态分析工具的生活更轻松。
  3. 大多数流行的设计模式要求您将变量初始化为默认值,以便程序员确切知道变量初始化的值。
  4. 最好初始化变量以防止程序中的未定义行为。
  5. 初始化变量时,调试变得更容易。

答案 3 :(得分:1)

使用前必须先初始化局部变量。

class Main {
  public static void main(String[] args) {
    int x;
    System.out.println(x);
  }
}

此代码无法编译。但是,实例变量(如果为static,则为类)具有默认值。

答案 4 :(得分:0)

其他人已经指出,类属性会初始化为默认值。

因此,从语义上讲,如果将它们显式设置为0,则没有区别(或者,对于对象属性,将它们设置为null。)

然而,字节码级别实际上可能存在差异。无法保证仅在类属性中不同的代码(隐式与显式设置为默认值)将具有完全相同的字节码。

旧版本的JDK用于生成更大和更长的代码以进行显式初始化,这很容易通过javap进行检查。 (这个事实偶尔被用作面试问题的基础。)我还没有检查JDK的最新版本,看看是否仍然如此。