![](/img/trans.png)
[英]Why java do not give error on returning an integer while the return type is long or double?
[英]Why Does Java Compiler Treat Long Data Type As Double Instead of Integer By Default?
我是 Java 的新手,我在测试一些代码时偶然发现了这一点。 为什么 Java 将 x(数据类型为 long)传入 function 接受双参数而不是 integer 参数。 如果有人能向我解释原因,我将不胜感激(尽管这对你们大多数人来说可能是一个简单的问题!)提前谢谢你!
public class Hello {
public static void main (String [] args) {
long x=1;
System.out.println("Before calling the method, x is "+x);
increase(x);
System.out.println("After calling the method, x is "+x);
System.out.println();
double y=1;
System.out.println("Before calling the method, y is "+y);
increase(y);
System.out.println("After calling the method, y is "+y);
}
public static void increase(int p) {
p+=1;
System.out.println(" Inside the method is "+p);
}
public static void increase(double p) {
p+=2;
System.out.println(" Inside the method is "+p);
} }
调用方法时允许的转换由 JLS 第 5 章定义。隐式原始转换必须是加宽的,也就是说,不会导致幅度损失(尽管在 long 到 double 的情况下,可能会导致精度损失)。
有六种转换上下文,其中多边形表达式可能受上下文影响或可能发生隐式转换。 每种上下文对多表达式类型都有不同的规则,并允许在上述某些类别中进行转换,但不允许在其他类别中进行转换。 上下文是:
...
严格的调用上下文(§5.3、§15.9、§15.12),其中参数绑定到构造函数或方法的形式参数。 可能会发生扩大原语、扩大参考和未经检查的转换。
松散的调用上下文(第 5.3 节、第 15.9 节、第 15.12 节),其中,与严格调用上下文一样,参数绑定到形式参数。 如果仅使用严格的调用上下文无法找到适用的声明,则方法或构造函数调用可以提供此上下文。 除了扩大和未经检查的转换外,此上下文还允许进行装箱和拆箱转换。
从 long 转换为 int 是一种缩小的原始转换,因为它可能会导致幅度信息的丢失。 因此,除非您首先明确转换为(int)
,否则不会调用它。
您有 2 个用于 increase() 的重载方法,其中 int 和 double 作为输入参数。 您还将输入参数作为长类型传递。
在 Java 中,UpCasting 以以下格式发生。
byte -> short -> int -> long -> float -> double
因此,当您将 long 类型值作为输入参数传递时,编译器首先会在输入参数中查找完全匹配。 如果没有找到,那么它将向上转换到下一个值。
因此,长值可以被具有双值作为输入参数的方法接受。
请通过以下网址 go。
Java中的类型转换
类型转换 - Oracle 文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.