Java中浮点“1”和浮点“1f”之间有什么区别?

时间:2012-07-04 06:57:57

标签: java variables floating-point

在Java中,在定义浮点变量之间是否有任何区别,例如:1和这个:1f?当我写1时,JVM是否在运行时进行任何强制转换,或者是什么可能会减慢我的应用程序?

此致

6 个答案:

答案 0 :(得分:6)

隐含地将

1视为int字面值,其中1f被视为float字面值

查看

答案 1 :(得分:4)

Java代码

    float f1 = 1;
    float f2 = 1f;

编译为以下字节码:

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

如您所见,在运行时没有区别。

答案 2 :(得分: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;


问候。

答案 3 :(得分:3)

基本上1默认为int。如果您撰写1f,则会将其视为float。如果你写1.0(没有f),它将默认为double

  

浮点文字的类型为float,如果后缀为   ASCII字母F或f;否则它的类型是双倍的,它可以   可选地以ASCII字母D或d为后缀。

For more info about java data types.

答案 4 :(得分: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)

我们可以为这两个例子分析的是,对于第一个示例,它会自动转换为float,但对于第二个示例,如果添加一些小数点而没有f或{ {1}}后缀比自动转换为F

答案 5 :(得分:1)

是的,11f之间存在很大差异。由于您无法在不给出java类型的情况下声明变量,因此在编译时它的1int1f表示float。这与运行时间或减慢应用程序无关。