Ton*_*ony 2 java primitive pass-by-reference pass-by-value
为什么可以将原语传递给接受对象的方法?原始变成了一个对象吗?像int = Integer和boolean = Boolean?
我可以调用以下函数:
hash(41, 0);
public static int hash(int seed, Object object)
{
int result = seed;
if(object == null)
{
return hash(result, 0);
}
else if(!isArray(object))
{
result = hash(result, object.hashCode());
}
else
{
int length = Array.getLength(object);
for(int index = 0; index < length; ++index)
{
Object item = Array.get(object, index);
// prevent looping if item in array references the array itself
if(!(item == object))
{
result = hash(result, item);
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
是的,这称为拳击转换.该int值被"装箱"成一个Integer,这是一个Object.它从1.5开始就在Java中提供.
在JLS,第5.1.7节列出了可用的装箱转换:
拳击转换将基本类型的表达式转换为引用类型的相应表达式.具体来说,以下九个转换称为装箱转换:
从类型布尔值到类型布尔值
从类型字节到类型字节
从短类型到短类型
从类型char到类型字符
从int类型到Integer类型
从类型long到类型Long
从类型float到类型Float
从double类型到Double类型
从null类型到null类型
此外,在方法调用转换期间允许装箱转换,这正是这里发生的事情.该值正在转换为另一种类型,因为int 0它被传递给期望的方法Object.的JLS,第5.3节,列出装箱转换为方法调用转换的一个方法:
方法调用上下文允许使用以下之一:
身份转换(§5.1.1)
扩展的原始转换(第5.1.2节)
扩大参考转换(第5.1.5节)
一个拳击转换(§5.1.7)可选地后面加宽引用转换
一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换.
| 归档时间: |
|
| 查看次数: |
2235 次 |
| 最近记录: |