1前書き

通常、Javaのバージョン8に付属している新機能について考えるとき、関数型プログラミングとラムダ式が最初に思い浮かぶものです。

それにもかかわらず、これらの大きな機能の他に、他にも影響が小さいかもしれませんが、興味深いことも多く、実際にはあまり知られていないか、レビューでカバーされていないことさえあります。

このチュートリアルでは、言語のコアクラスの1つに追加された新しいメソッドのそれぞれの簡単な例を列挙して説明します。

__https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html


2新しい



exact()メソッド**

まず、既存の最も一般的な算術演算のいくつかを拡張する新しい方法のグループがあります。

これから説明するように、派生メソッドとまったく同じ機能を持っていますが、例外が発生することを除いて、結果の値が最大値または最小値をオーバーフローするので、これらはまったく自明です。タイプ。**

これらのメソッドは、

integers



longs

の両方をパラメータとして使用できます。


2.1.

addExact()


2つのパラメータを追加し、

オーバーフローの場合に

ArithmeticException

をスローします(これはすべての



Exact()メソッドに適用されます)** 。

Math.addExact(100, 50);              //returns 150
Math.addExact(Integer.MAX__VALUE, 1); //throws ArithmeticException


2.2.

substractExact()


最初のパラメータから2番目のパラメータの値を減算し、減算のオーバーフローの場合に

ArithmeticException

をスローします。

Math.subtractExact(100, 50);          //returns 50
Math.subtractExact(Long.MIN__VALUE, 1);//throws ArithmeticException


2.3.

incrementExact()


オーバーフローの場合に

ArithmeticException

をスローして、パラメータを1つ増やします。

Math.incrementExact(100);              //returns 101
Math.incrementExact(Integer.MAX__VALUE);//throws ArithmeticException


2.4.

decrementExact()


オーバーフローの場合は

ArithmeticException

をスローして、パラメータを1つ減らします。

Math.decrementExact(100);           //returns 99
Math.decrementExact(Long.MIN__VALUE);//throws ArithmeticException


2.5.

multiplyExact()


2つのパラメータを掛けて、製品がオーバーフローした場合は

ArithmeticException

をスローします。

Math.multiplyExact(100, 5);           //returns 500
Math.multiplyExact(Long.MAX__VALUE, 2);//throws ArithmeticException


2.6.

negateExact()


オーバーフローの場合に

ArithmeticException

をスローして、パラメータの符号を変更します。

この場合、メモリ内の値の内部表現について考えて、オーバーフローが発生する理由を理解する必要があります。残りの「正確な」方法ほど直感的ではありません。

Math.negateExact(100);              //returns -100
Math.negateExact(Integer.MIN__VALUE);//throws ArithmeticException

2番目の例では、わかりにくいので説明が必要です。** オーバーフローは

Integer.MIN

VALUE

が-2.147.483.648であることと、反対側の

Integer.MAX

VALUE

が2.147.483.647であることが原因です。 1単位の

Integer


3その他の方法


3.1.

floorDiv()


最初のパラメータを2番目のパラメータで除算し、その結果に対して

floor()

演算を実行して、商以下の

Integer

を返します。

Math.floorDiv(7, 2)); //returns 3

正確な商は3.5なので

floor(3.5)

== 3です。

別の例を見てみましょう。

Math.floorDiv(-7, 2));//returns -4

正確な商は-3.5なので

floor(-3.5)

== -4です。


3.2.

modDiv()


これは前のメソッド

floorDiv()

と似ていますが、商の代わりに係数または除算の剰余に対して

floor()

操作を適用します。

Math.modDiv(5, 3)); //returns 2

ご覧のとおり、2つの正数に対する


modDiv()

は%operator

と同じです。別の例を見てみましょう。

Math.modDiv(-5, 3)); //returns 1


floorDiv(-5、3)

は-1ではなく-2であるため、2ではなく1を返します。


3.3.

nextDown()


パラメータのすぐ下の値を返します(

float

または

double

パラメータをサポート)

float f = Math.nextDown(3); //returns 2.9999998
double d = Math.nextDown(3);//returns 2.999999761581421


4結論

この記事では、バージョン8のJavaプラットフォームでクラス


java.lang.Math


に追加されたすべての新しいメソッドの機能について簡単に説明し、それらの使用方法の例をいくつか見ました。

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-8[over on GitHub]から入手できます。