每当我想到我对铸造和转换的理解时,我发现了另一种奇怪的行为.
long l = 123456789L;
float f = l;
System.out.println(f); // outputs 1.23456792E8
Run Code Online (Sandbox Code Playgroud)
鉴于a的long位深度比a大float,我希望为了编译它需要一个显式的强制转换.毫不奇怪,我们发现结果已经失去了精确度.
为什么这里不需要演员?
在重载概念中,我有一个疑问,就是这样.当我使用int值重载方法时,方法调用的是float参数方法,而不是double参数方法.
void method1(float f){
System.out.println('float');
}
void method1(double f){
System.out.println('double');
}
Run Code Online (Sandbox Code Playgroud)
方法调用:
method1(10);
Run Code Online (Sandbox Code Playgroud)
输出:浮动
如此链接中的java教程中所述, 浮点字面值的类型为float,如果它以字母F或f结尾; 否则它的类型是双倍的,它可以选择以字母D或d结尾.
对于上面的情况,方法调用应该调用double参数方法.但它调用了float参数方法.
如何在这个区域发生超载过程?