Java 方法重载:参数的顺序会影响延迟吗?
Java method overload: Does the order of parameter affect latency?
假设我有以下 class A 和方法 X。我可以通过以下两种方式重载这些方法。
A{
void X(foo p, bar q);
void X(foo p, baq q);
}
A{
void X(foo p, bar q);
void X(baq q, foo p);
}
是否应该首选第二种实现方式,因为它会花费更少的时间来解析和命中正确的函数?
如果需要更多说明,请告诉我。
应该没关系,但你可以分别输出两个函数调用前后的时间并比较毫秒数。
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println("Before: {0}", dateFormat.format(date));
x(foo f, baq q);
System.out.println("After: {0}", dateFormat.format(date));
如果两个函数都在执行相同的函数(最可能是因为它们具有相同的名称),您可以只使用通用方法。
void x(T t, U u){}
就延迟而言,参数的顺序没有区别,因为基于参数类型的重载是在编译时解决的,而不是在 运行 时。
调用一个重载而不是另一个重载的决定是在基于参数表达式的静态类型分析调用上下文之后做出的。这个决定在字节码中是 "recorded",所以 运行ning JVM 不会花任何时间做这个决定。
假设我有以下 class A 和方法 X。我可以通过以下两种方式重载这些方法。
A{
void X(foo p, bar q);
void X(foo p, baq q);
}
A{
void X(foo p, bar q);
void X(baq q, foo p);
}
是否应该首选第二种实现方式,因为它会花费更少的时间来解析和命中正确的函数?
如果需要更多说明,请告诉我。
应该没关系,但你可以分别输出两个函数调用前后的时间并比较毫秒数。
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println("Before: {0}", dateFormat.format(date));
x(foo f, baq q);
System.out.println("After: {0}", dateFormat.format(date));
如果两个函数都在执行相同的函数(最可能是因为它们具有相同的名称),您可以只使用通用方法。
void x(T t, U u){}
就延迟而言,参数的顺序没有区别,因为基于参数类型的重载是在编译时解决的,而不是在 运行 时。
调用一个重载而不是另一个重载的决定是在基于参数表达式的静态类型分析调用上下文之后做出的。这个决定在字节码中是 "recorded",所以 运行ning JVM 不会花任何时间做这个决定。