【发布时间】:2020-03-12 07:44:33
【问题描述】:
给定一个非常简单的类:
class MyClass {
int id;
double value;
MyClass(int id) {
this.id = id;
}
void setValue(double v) {
value = v;
}
boolean isValueUnassigned() {
return value == 0;
}
}
要检查value是否还没有被分配,如果我只做return value == 0;可以吗,因为double默认是0?
【问题讨论】:
-
“如果我只是这样做”是什么意思?是否要使用 if 语句来检查值是否等于 0?
-
是的。没关系。原始
double被初始化为0。但是,您可以显式初始化变量。这被认为是好的做法。 -
如果我理解正确,你会检查双倍是否改变了? ....问题是当 0 是一个有效值时有人可以设置 0 ...而不是您的检查方法行为错误
-
典型的方法是使用一个标记值,比如一个额外的
boolean isSet标志,或者使用一个像Double这样的包装对象作为内部表示,它可以使用null作为标记值来指出这一点。而且,只有在您的应用程序允许的情况下,您才能指定一个永远不能用作哨兵的值。例如-1或age字段的任何其他负值。