4

シナリオ:

1) 設定することも設定しないこともできる長い状態変数があります。

2) この long 変数には、ゼロを含む Long.MIN_VALUE から Long.MAX_VALUE までの有効な値があります。

3) これはパフォーマンスに敏感なコードなので、Long ラッパー タイプは使用したくありません。

この長い間、「設定されている」種類のチェックを作成するにはどうすればよいですか? longが有効かどうかをテストするために、2番目のブール値を追加する必要がありますか? これはずさんなようです。ここで 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
  }
}

}

}
4

4 に答える 4

3

NaN の特別な値を確保する必要があります。可能なすべての値を実際に使用する場合、何もありません。

Long オブジェクトがそれほどパフォーマンスの問題であると確信していますか?

もしそうなら、値が設定されているかどうかを示すために余分なブール値を持っているのでしょうか?

于 2012-04-27T03:46:03.277 に答える
3

long の代わりに Long を使用し、NaN 値として null を使用します。

于 2012-04-27T06:59:00.687 に答える
1

長くはありませんNaN。パフォーマンスが重要であると確信している場合 ( a を使用した場合の速度のペナルティをテストしLongます)、別のフラグ値を使用する必要があります。

于 2012-04-27T03:44:43.957 に答える
1

Long.MIN_VALUE のような奇妙なプロパティがあるため、使用しました

Long.MIN_VALUE == -Long.MIN_VALUE

自然に発生する可能性も低いです。

それを使用する際の問題は、コードがより複雑になる可能性があることです。このため、double代わりに +/- 2^53 未満の整数値を使用して、エラーなしで表すことができます。

于 2012-04-27T05:44:42.573 に答える