これら2つのステートメントの間に違いはありますか?
-
06-07-2019 - |
質問
-
float ff = 1.2f;
-
Float fo = new Float(1.2f);
-
double fg = 3.2d;
-
Double fh = new Double(2.1d);
(1)と(3)の間、または(2)と(4)の間で「=」を使用できますか?
解決
はい。
- " float"と呼ばれる単純な古いデータ型(別名プリミティブ型)を作成します
- Floatという名前のJavaオブジェクトを作成します。このオブジェクトは、たまたま(1)と同じ値を保持します
編集の質問への応答:
表示されます
- "精度低下の可能性"
ff = fg
を試してみてください。 - "非互換タイプ"
fo = fh
を試してみてください。 -
fg = ff
は正常に動作します(floatはdoubleに収まります)。 -
fh = fo
は引き続き「互換性のない型」を提供します。
他のヒント
はい、2はオブジェクトを作成します。
はい、最初はプリミティブ型で、2番目はプリミティブfloat型の機能をラップするボクシングクラスです。たとえば、コレクションで使用する場合は2番目が必要です。型変換を多く処理する必要が生じる前(Java 1.5まで)、ラッパークラスの存在がそれらの機能を使用するようになりました。詳しくは。 こちら
はい。最初は、プリミティブ型 float
の変数を宣言し、1.2に初期化します。
2番目が参照型 Float
の変数を宣言している間に、型 Float
のオブジェクトを作成し、変数への参照を割り当てます。
new Float(1.2f)は、毎回 new Floatオブジェクトを作成し、メモリを消費します。
ファクトリメソッド Float.valueOf(1.2f) JVMは、同じ値の既存のFloatオブジェクトインスタンスを再利用できます。同じ値を持つFloatインスタンスがまだない場合にのみ、新しいオブジェクトインスタンスを作成できます。
通常は、新しいFloat(1.2f)ではなくFloat.valueOf(1.2f)を使用します。
また、等号演算子 == ではプリミティブとオブジェクトの動作が異なることに注意してください。
float x1 = 1.2f;
float x2 = 1.2f;
x1 == x2 // true
Float f1 = new Float(1.2f);
Float f2 = new Float(1.2f);
f1 == f2 // false
はい、プリミティブ型はNULLにできません、オブジェクトはできます。また、Floatオブジェクトには、便利なユーティリティ関数が多数付属しています。
-
この宣言を使用すると、プリミティブ型floatがあり、それに値が割り当てられます。プリミティブ型は、他のデータ型で構成されていないデータ型であり、(簡単に説明すると)分割できません。プリミティブは一般に組み込み型です。
-
この場合、オブジェクトを作成し、内部的に小さなデータ型で構成され、メソッドも含みます。
プリミティブ型floatとオブジェクト型の主な違いは、プリミティブは単なるデータの形式であり、プロパティやメソッドがないことです。
3 = 1は正常に機能し、残りは機能しません。
実際のアプリケーションでは、floatまたはFloatを使用しないことをお勧めします。あまり正確ではなく、適切なソリューションではないため、代わりにdoubleまたはDoubleを使用してください。