[英]long primitive NaN value wanted
场景:
1)我有一个可以设置或不设置的长状态变量。
2)此long变量具有从Long.MIN_VALUE到Long.MAX_VALUE的有效值,包括零
3)这是性能敏感的代码,所以我不想使用Long包装器类型
我怎么写这么长的'套装'检查? 我是否真的必须添加第二个布尔值来测试long是否有效? 这似乎很草率。 我知道我可以在这里使用Long包装器,但这似乎是创建如此多的对象并检查null的性能浪费。
伪代码(这是我想要的):
class foo {
long someLong = NaN; //NaN = hypothetical not a number like Double
public reset() {
someLong = NaN;
}
public doSomethingElse() {
if(someLong !=NaN) {
//report
reset();
}
}
public doSomeStuff() {
if(someLong == NaN) {
someLong = //something
}
}
}
}
您必须为NaN留出一个特殊值。 如果你真的使用了所有可能的值,那就没有了。
你确定Long对象有很大的性能问题吗?
如果是这样,可能有一个额外的布尔值来表示是否设置了值?
使用Long而不是long,并使用null作为NaN值。
很久没有NaN
了。 如果您确定性能至关重要(我将测试使用Long
的速度惩罚),那么您将需要使用另一个标志值。
我使用了Long.MIN_VALUE,因为它具有奇怪的属性
Long.MIN_VALUE == -Long.MIN_VALUE
它也不太可能自然发生。
使用它的问题是,它可以使代码更复杂。 出于这个原因,我使用了double
而不是+/- 2 ^ 53的整数值可以无错误地表示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.