2012-07-04 180 views

回答

4

Java代码

float f1 = 1; 
    float f2 = 1f; 

编译成字节码如下:

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

正如你所看到的,有在运行时没有区别。

6

1被隐含视为int字面其中1f被认为是float字面

参见

+0

是的,还有我的第二个问题:“当我写1时,JVM会在运行时执行任何操作,还是会降低我的应用程序的速度?” – m4tx

+1

不,不应该有任何放慢你的表现 –

3

基本上1将默认为int。如果你写1f它将被认为是float。如果你写1.0(不是f),它将默认为double

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

For more info about java data types.

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,但对于第二个示例,如果您添加一些小数点而没有fF后缀比它会自动转换为double

1

是的,11f之间有很大的差异。由于您不能在java中未声明变量而声明变量,因此其明确的1int1f表示编译时本身的float。这与运行时间或减慢应用程序无关。

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 a = 2.0; 
double b = 2d; 
double c = 2.0f; 
if (a == b) { 
    if (c == a) { 
     if (c == b) { 
      return 1; 
     } 
    } 
} 

将返回1;


此致。

相关问题