次のプログラムを印刷それぞれ「偽の」と「真」:不要なオートボクシングの魔法
Number n = true ? new Long(1) : new Double(2.0);
System.out.println(n instanceof Long);
System.out.println(n instanceof Double);
だからそれは長いが、ダブルではありません。しかし、それは通常のクラスに意図したとおりに動作します: が、これは「真」に印刷されます
class B {}
class D1 extends B {}
class D2 extends B {}
を持つ:
B b = true ? new D1() : new D2();
System.out.println(b instanceof D1);
を、それは上記の例のように同じように動作していないことを意味しています。
私はautoboxingに関連するものがあると確信していますが、本当にそれはうまくいくはずですか? NumberクラスがLongとDoubleの両方のスーパークラスであるため、式をNumberに評価できるようにするために、なぜボクシングを使用するのですか?
nを印刷すると、二重の値として印刷されるので、本当に苦しいです。 (私は回避しやすいですけど、狂気私を運転した)
は '?'型を取ります最後の式のもしそれを 'null'にすると' Long':Pになります。 –
いいえ、最後の式の型を取りません。ちょうど2番目の例を見てください。もちろんコードは単なる例ですが、本当のブール情報が存在すると想像してください。ここで、本当のものはどこにあるのでしょうか。 – poroszd
なぜ近い票?これは私にとってうれしい質問のようです。 –