さて、あなたが今持っているコードはコンパイルさえしません -Math.abs(Object)
私が知る限り呼び出しはありません。ただし、実際にそこにギプスがあると仮定するとDouble
、常にボクシングをすることになります。次のように、値がすでに 0 より大きい場合はボクシングを回避し、値が0の場合は呼び出しを回避できます。
static Double getAbsValue(Object[] values) {
if (values == null || values.length == 0) {
return null;
}
Double value = (Double) values[0];
return value > 0 ? value
: value == 0 ? null
: -value;
}
最後のオプションにたどり着くまでに、値が負であることはすでにわかっているので、これ以上呼び出す必要はありませんabs
。
ここでのコンテキストが何であるかは明確ではありません。あなたはパフォーマンスの問題があると言っていますが、それは間違いなくこのコードにありますか?
編集:あなたの最新のコードが示しています:
if (absValue>0) return absValue
else return -1*absValue;
元のコードのように、配列にボックス化された 0 値が含まれている場合、null は返されません。
パフォーマンスの前に正確さに集中する必要があります。
0 の入力でコードに何をさせたいですか? 0 を返したい場合は、次を使用します。
return value >= 0 ? value : -value;
null を返したい場合は、最初に提供したコードを使用してください。
ところで、単項否定演算子を使用するだけでなく、-1 による乗算を含めるのはなぜですか? とにかく、コンパイラまたはJITのいずれかがそれを取り除くことを期待していますが、基本的に、乗算を実行したくない-否定を実行したいのです。目的を説明する方法にできるだけ近いコードを読んでください。