4

ifステートメントでの比較のためにJavaで、私は書いた

if (x == 1)

コード レビューで、1 の代わりに NumberUtils.INTEGER_ONE を使用するというコメントがありました。実際にコードにどのような利点が追加されるのか疑問に思っていました。

4

1 に答える 1

5

NumberUtils.INTEGER_ONEおそらくcommons-langから来ています。

ではcommons-lang、次のように定義されています。

public static final Integer INTEGER_ONE = new Integer(1);

ではcommons-lang3、次のように定義されています。

public static final Integer INTEGER_ONE = Integer.valueOf(1);

最初のバージョンは内部整数キャッシュを (まだ存在していなかったため) 使用しませんが、2 番目のバージョンはそれを利用します。

さて、使用しているバージョンが何であれ、整数値を比較し、整数値を割り当てたり作成したりしないため、質問にはあまり関係ありませ(キャッシュがより理にかなっている場合)。


次のように使用しているとします。

if (x == NumberUtils.INTEGER_ONE)
  • がプリミティブの場合、int プリミティブxに変換するためのボックス化解除操作が発生するため、あまり効率的ではありません。NumberUtils.INTEGER_ONE1

  • がオブジェクトの場合、オブジェクトはまたはと比較する必要があるxため、良い考えではありません。Integerequals()intValue()

于 2017-07-14T06:53:56.383 に答える