自动转换为双倍参数

Automatic cast to double in parameter

为什么Java施法点数自动加倍?当我施放它时,它起作用了。但这在我看来并不是什么美好的方式。

我的方法可以更改为双重签名。但是当我导入一些东西时,我找不到解决方案。

public class Demo {

    public static void main(String[] args) {
        run(0.1);
        run(1*0.1);
        run(1);
        importedClass.setPosition(0.1, 3.5); 
        //setPosition(float, float) not applicable for the arguments (double, double)
        run((float) 0.1);
        run((float) 1*0.1);
        run(1);
        importedClass.setPosition((float) 0.1, (float) 3.5); 
    }

    public static void run(float x) {
        //do something
    }

}

抛出未解决的编译问题:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
The method run(float) in the type Demo is not applicable for the arguments (double)
The method run(float) in the type Demo is not applicable for the arguments (double)

at test.Demo.main(Demo.java:6)

发生这种情况是因为当没有为十进制数指定后缀 'f' 或 'd' 时,java 会自动将其默认为双精度数。

因此, 运行(0.1);

变成: 运行(0.1d);

定义在Java Language Specification:

A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d

因此,您可以通过使用后缀

让编译器清楚地知道您实际上使用的是 float 类型的文字,而不是强制转换
run(0.1f);