1Javaでは、たとえばthis:とthis:のようなfloat変数の定義に違いはあります1fか?JVMは、実行時に書き込み時にキャストを実行していますか1、それともアプリの速度を低下させる可能性がありますか?
よろしく
1Javaでは、たとえば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なしで小数点を追加すると、自動的にに変換されます。fFdouble
はい、との間には大きな違いが1あり1fます。javaで型を指定せずに変数を宣言することはできないため、そのclear1はanintであり、コンパイル時にそれ自体を1f示します。floatこれは、実行時間やアプリの速度低下とは関係ありません。