gpt4 book ai didi

java - Java 变量应该在声明时初始化吗?

转载 作者:行者123 更新时间:2023-12-01 18:11:53 26 4
gpt4 key购买 nike

简单的问题,但有兴趣知道在声明时初始化 Java 变量是否是一个好习惯?我并不是很始终如一;我倾向于初始化 boolean 值,但没有其他。例如:

private Boolean test = false;
private Integer count;

我确信这是一个非常基本的问题,但我有兴趣知道为什么以及何时?

最佳答案

来自Java Practices ,JVM将隐式设置以下默认值:

  • 数字:0 或 0.0
  • boolean 值:假
  • 对象引用:null

事实上,如果您显式设置这些值,则可能会导致操作执行两次。看一下下面的示例类及其使用 Oracle 的 javac 编译的字节码:

public final class Quark {

public Quark(String aName, double aMass){
fName = aName;
fMass = aMass;
}

//PRIVATE

//WITHOUT redundant initialization to default values
//private String fName;
//private double fMass;

//WITH redundant initialization to default values
private String fName = null;
private double fMass = 0.0d;
}

没有冗余

>javap -c -classpath . Quark 
Compiled from Quark.java
public final class Quark extends java.lang.Object {
public Quark(java.lang.String,double);
}
Method Quark(java.lang.String,double)
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 aload_0
5 aload_1
6 putfield #2 <Field java.lang.String fName>
9 aload_0
10 dload_2
11 putfield #3 <Field double fMass>
14 return

并且有冗余:

>javap -c -classpath . Quark 
Compiled from Quark.java
public final class Quark extends java.lang.Object {
public Quark(java.lang.String,double);
}
Method Quark(java.lang.String,double)
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 aload_0
5 aconst_null
6 putfield #2 <Field java.lang.String fName>
9 aload_0
10 dconst_0
11 putfield #3 <Field double fMass>
14 aload_0
15 aload_1
16 putfield #2 <Field java.lang.String fName>
19 aload_0
20 dload_2
21 putfield #3 <Field double fMass>
24 return

关于java - Java 变量应该在声明时初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com