2

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

问候

4

6 回答 6

6

1 被隐式视为int文字,其中1f被视为float文字

于 2012-07-04T06:59:08.583 回答
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 回答
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 回答
3

基本上1将默认为int. 如果你写1f它会被认为是一个float. 如果你写1.0(no f) 它将默认为 a double

如果浮点文字以 ASCII 字母 F 或 f 为后缀,则它的类型为 float;否则它的类型是双精度的,并且可以选择以 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)

对于这两个例子,我们可以分析的是,第一个例子它会自动转换为,但是对于第二个例子,如果你添加一些不带or后缀float的小数点,它会自动转换为。fFdouble

于 2012-07-04T07:09:08.777 回答
1

1是的,和之间有很大的不同1f。因为你不能在java中不给出它的类型就声明一个变量,它的明确1是一个int并且在编译时本身1f表示float。这与运行时间或减慢您的应用程序无关。

于 2012-07-04T08:12:13.313 回答