我一直认为Java是一种强类型语言。但最近,我注意到我几乎每天都在使用的一些东西: int
和double
重载。
我可以写以下代码,它是有效的Java代码:
int i = 1;
double j = 1.5;
double k = i + j;
但是,如果我的方法有一个参数是 double
类型,我需要指定它:
public static <K, V> V getOrDefault(K k, Map<K, V> fromMap, V defaultvalue) {
V v = fromMap.get(k);
return (v == null) ? defaultvalue : v;
}
当我在
Map<String, Double>
上调用上述方法时,defaultValue
参数不能是 int
类型:getOrDefault(aString, aStringDoubleMap, 0); // won't compile
getOrDefault(aString, aStringDoubleMap, 0d); // compiles and runs just fine
为什么Java将int重载为double(就像在加法中一样),然后自动装箱为Double?我认为答案在于Java如何进行运算符重载(即重载发生在+运算符中,而不是从int到double),但我不确定。
希望SO能够帮助我解决这个问题。
Integer
到Double
的转换是不允许的。 - Chthonic Project