Java プリミティブ型のラッパークラスの演算で null ってどうなるんだろうか、それ以外にも BigInteger や BigDecimal の場合は?

f:id:ts0818:20190717194646j:plain

「私だ」 

「お前だったのか」 

「また騙されたな」 

「全く気付かなかったぞ」 

「暇を持て余した」 

「神々の」 

「遊び」 

神々の遊び (かみがみのあそび)とは【ピクシブ百科事典】

ということで、どうもボクです。

Javaの演算で、null の処理ってどうなるんじゃろか?って質問を、職場の同僚の方に聞かれて、はて?どうなるんだろうか?と思ったので、調べてみました。

以外に、ネットの情報が少ないという...初歩的なことなのかしら?私は、Java の演算におけるnull の挙動がどうなるのか、知りませんでしたけど(涙)。

というわけで、今宵もJavaのお話です。レッツトライ~。

 

プリミティブ型?そんなの関係ねぇ!

はい、オッパッピー!

morizyun.github.io

参照型の特徴のひとつとしてnullをもつことができます。プリミティブ型はnullをもつことができません。

Javaのプリミティブ型と参照型 | 酒と涙とRubyとRailsと

ということで、プリミティブ型はそもそも null が代入されることがないので考慮せずともOK。 

 

プリミティブ型のラッパークラス(いわゆる参照型というやつ)

これは、考慮せねばですね。ここでは、Integerクラスで検証してみます。

f:id:ts0818:20190717205905p:plain

はい、そもそも、null は計算できない子らしい...

関数型インターフェイス使っても、

f:id:ts0818:20190717223359p:plain

null は計算されない子であると...。
 

 

BigIntegerでは?(いわゆる参照型というやつ)

いざ。

f:id:ts0818:20190717220124p:plain

はい、駄目でした...。
 

 

BigDecimalでは?(いわゆる参照型というやつ)

いざ。

f:id:ts0818:20190717220618p:plain

はい、駄目でした...。

NullPointerException を回避するには、デフォルト値みたいなのを決め打ちしとかないと駄目みたいですね...

つまり、null だった場合にも計算を続けたいときは、null 以外のものに置き換える必要があるのだと。

f:id:ts0818:20190717221309p:plain

三項演算子の繰り返しとか、むちゃくちゃ可読性が悪い気がする...なんか素直に if 文とか使ったほうが良さげですかね...

 

結論

null は計算に含むことができない?、と思う。 

そんなわけで、今回もモヤモヤ感が半端ない1日でしたかね...

今回はこのへんで。