为什么在java中int被转换为float?
在此代码中为什么在java中int被转换为float?,java,casting,Java,Casting,在此代码中 public void display(int x, double y){ System.out.println("Double"); } public void display(int x, float y){ System.out.println("Float"); } public static void main(String[] args){ pr
public void display(int x, double y){
System.out.println("Double");
}
public void display(int x, float y){
System.out.println("Float");
}
public static void main(String[] args){
prog01 p = new prog01();
p.display(4,5); //First Output
p.display(4,5.0); // Second Output
}
这些产出是:
Float
Double
第二个输出是可以理解的,但是为什么5在应该给出错误时被强制转换为浮点呢?加宽强制转换(隐式)发生时,字节->短int
->长浮点双。
这里传递整数,因为它没有long
作为类型,下一个是float
。这就是为什么它会给你浮动,为什么它会给你一个错误?该值是隐式加宽的。@akuzminykh为什么不加宽到两倍?它在哪里说应该加宽到double
,而不是float
?您的期望依据是什么?@AyushBasak查看限制整数.MAX_值
和浮点.MAX_值
;一个double
是不必要的。@AyushBasak说到你的观点:你可以想象找到一个方法的过程是这样的:1)编译器搜索一个与你正在传递的参数及其类型完全匹配的方法。2) 如果在1)中找不到任何方法,编译器允许扩大搜索范围。在您的例子中,编译器会找到方法display(int,double)
,因为5
可以扩展到float
。