2

1Javaでは、たとえばthis:とthis:のようなfloat変数の定義に違いはあります1fか?JVMは、実行時に書き込み時にキャストを実行していますか1、それともアプリの速度を低下させる可能性がありますか?

よろしく

4

6 に答える 6

6

1は暗黙的にintリテラルと見なされますが、リテラル1fと見なされますfloat

見る

于 2012-07-04T06:59:08.583 に答える
4

Javaコード

    float f1 = 1;
    float f2 = 1f;

次のバイトコードにコンパイルされます。

     0: fconst_1      
     1: fstore_1      
     2: fconst_1      
     3: fstore_2    

ご覧のとおり、実行時に違いはありません。

于 2012-07-04T07:20:24.853 に答える
4
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を返します。


よろしく。

于 2013-04-17T09:52:38.007 に答える
3

基本的1にはデフォルトでint。あなたが書く場合、1fそれはと見なされますfloat1.0(fなしで)書くと、デフォルトで。になりますdouble

浮動小数点リテラルは、ASCII文字のFまたはfが接尾辞として付いている場合、float型になります。それ以外の場合、そのタイプはdoubleであり、オプションでASCII文字Dまたはdの接尾辞を付けることができます。

Javaデータ型の詳細については。

于 2012-07-04T07:01:38.420 に答える
2

このような場合、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

于 2012-07-04T07:09:08.777 に答える
1

はい、との間には大きな違いが1あり1fます。javaで型を指定せずに変数を宣言することはできないため、そのclear1はanintであり、コンパイル時にそれ自体を1f示します。floatこれは、実行時間やアプリの速度低下とは関係ありません。

于 2012-07-04T08:12:13.313 に答える