检查是否已设置原语

luc*_*jyt 2 java primitive

给定一个非常简单的类:

class MyClass {
    int id;
    double value;

    MyClass(int id) {
        this.id = id;
    }

    void setValue(double v) {
        value = v;
    }

    boolean isValueUnassigned() {
        return value == 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

要检查是否value尚未分配,return value == 0;因为a double0默认设置,我可以这样做吗?

小智 5

好吧,默认情况下原语double设置为是0.0。但是,如果您只是这样做,return value == 0;则无法确定setValue(0)之前是否有人打过电话,但这也是有效的分配。如果你想 100% 确定是否有人打电话给我,setValue()我建议你这样做:

class MyClass {
    private int id;
    private double value;
    private boolean valueSet; // is false by default 

    public MyClass(int id) {
        this.id = id;
    }

    public void setValue(double v) {
        value = v;
        valueSet = true;
    }

    public boolean isValueSet() {
        return valueSet;
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您应该为double的包装类选择Double。对于Double数据类型,默认值为null。这样就不会有任何歧义。如果value为null,则不会分配任何值。