Java 函数重载未解决的示例
现在我的问题是,为什么即使第一个命令行参数5在short的范围内,sum(inti,intj)也会被调用,而当我像这样进行打字时,sum(short(5),5);然后它调用sum(短i,int j)在java中,文字整数为Java 函数重载未解决的示例,java,overloading,Java,Overloading,现在我的问题是,为什么即使第一个命令行参数5在short的范围内,sum(inti,intj)也会被调用,而当我像这样进行打字时,sum(short(5),5);然后它调用sum(短i,int j)在java中,文字整数为ints 因此,除非您指定它为short(例如通过强制转换),否则就编译器而言,它是对sum(inti,intj)的调用。这不是重载解析的问题-您使用short参数的方法甚至不适用。下面是一个例子: public class Roshni { void sum(int
int
s
因此,除非您指定它为
short
(例如通过强制转换),否则就编译器而言,它是对sum(inti,intj)
的调用。这不是重载解析的问题-您使用short
参数的方法甚至不适用。下面是一个例子:
public class Roshni {
void sum(int i, int j) {
System.out.println("inside 1st i = " + i);
}
void sum(short i, int j) {
System.out.println("inside 2nd i = " + i);
}
public static void main(String s[]) {
Roshni r = new Roshni();
r.sum(5, 5);
}
}
这会产生编译时错误:
public class Test {
public static void foo(short x) {
}
public static void main(String[] args) throws Exception {
foo(5); // Error
}
}
整数文本的类型是int
,没有从int
到short
的正常隐式转换。现在你可以写:
。。。因为这是在一个可以进行额外转换的
此外,如果表达式是byte
、short
、char
或int
类型的常量表达式(§15.28):
- 如果变量的类型是
、字节
或短
,并且常量表达式的值可以用变量的类型表示,则可以使用缩小原语转换字符
short
的值,则重载解析将发挥作用:
short x = 5;
现在这两种方法都适用,如果您将两种方法指定为
short x = 5;
r.sum(x, 5);
现在,如果调用sum(12.12,4)
,那么将调用sum(double i,int j)
。这是因为实值或十进制值在java中是双重类型的。要调用总和(short i,int j)
还需要通过将其转换为short来指定
sum(double i,int j)
sum(short i,int j)
此类型转换为short将丢弃64位双倍值12.23中的高阶位,并仅选取最后16位作为short值。当您提出问题时,请花时间格式化代码-如果缩进,代码的可读性会更好。此外,如果没有第二个参数,示例会更简单,如果
sum
是一个静态方法care@user4188607-谢谢Jon:P我知道你为什么建议将求和方法保持为静态Jon它不需要是非静态的,因为没有使用状态,您还没有提到在子类中重写方法的要求。它只是避免了创建一个Roshni
。任何主体都可以判断我的第一个函数是sum(double i,int j),第二个函数是sum(short i,int j),并保持命令行参数与调用哪个函数相同吗
sum(double i,int j)
sum(short i,int j)
sum(short(12.23),4)