1
Javaでは、たとえばthis:とthis:のようなfloat変数の定義に違いはあります1f
か?JVMは、実行時に書き込み時にキャストを実行していますか1
、それともアプリの速度を低下させる可能性がありますか?
よろしく
1
Javaでは、たとえばthis:とthis:のようなfloat変数の定義に違いはあります1f
か?JVMは、実行時に書き込み時にキャストを実行していますか1
、それともアプリの速度を低下させる可能性がありますか?
よろしく
Javaコード
float f1 = 1;
float f2 = 1f;
次のバイトコードにコンパイルされます。
0: fconst_1
1: fstore_1
2: fconst_1
3: fstore_2
ご覧のとおり、実行時に違いはありません。
float a = 1;
float b = 1f;
それは同じですが、あなたが次のようなことをした場合:
int a = 1f
「型の不一致:floatからintに変換できません」をスローします
int b = 1d or 1.0
「型の不一致:doubleからintに変換できません」をスローします
float c = 1d or 1.0
「タイプの不一致:doubleからfloatに変換できません」がスローされます。
次の点に
注意してください。
double a = 2.0;
double b = 2d;
double c = 2.0f;
if (a == b) {
if (c == a) {
if (c == b) {
return 1;
}
}
}
1を返します。
よろしく。
基本的1
にはデフォルトでint
。あなたが書く場合、1f
それはと見なされますfloat
。1.0
(fなしで)書くと、デフォルトで。になりますdouble
。
浮動小数点リテラルは、ASCII文字のFまたはfが接尾辞として付いている場合、float型になります。それ以外の場合、そのタイプはdoubleであり、オプションでASCII文字Dまたはdの接尾辞を付けることができます。
このような場合、JVMはそれを渡します。
public class Test {
public static void main(String[] args) {
float f = 1;
System.out.println(f);
}
}
ただし、次のようなことを行うと例外が発生します。
public class Test {
public static void main(String[] args) {
float f = 1.5;
}
}
例外:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - possible loss of precision
required: float
found: double
at package.Test.main(Test.java:17)
この2つの例で分析できるのは、最初の例では自動的にに変換されますが、2番目の例では、または接尾辞float
なしで小数点を追加すると、自動的にに変換されます。f
F
double
はい、との間には大きな違いが1
あり1f
ます。javaで型を指定せずに変数を宣言することはできないため、そのclear1
はanint
であり、コンパイル時にそれ自体を1f
示します。float
これは、実行時間やアプリの速度低下とは関係ありません。