Java 为什么我可以将原语传递给接受对象的方法?

Java 为什么我可以将原语传递给接受对象的方法?,java,pass-by-reference,primitive,pass-by-value,Java,Pass By Reference,Primitive,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);

为什么可以将原语传递给接受对象的方法?基本体是否已变成对象?比如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;
    }
hash(41,0);
公共静态整数散列(整数种子,对象)
{
int结果=种子;
if(object==null)
{
返回散列(结果为0);
}
如果(!isArray(对象))
{
result=hash(result,object.hashCode());
}
其他的
{
int length=Array.getLength(对象);
对于(int-index=0;index
是的,你可以。编译器会自动完成一些名为的操作。以下是这些文件的摘录

自动装箱是Java编译器进行的自动转换 在基元类型及其相应的对象包装器之间 上课。例如,将int转换为整数,将double转换为 双倍,等等。如果转换方向相反,则这是 叫做拆箱

是的,这叫做拳击转换。
int
值被“装箱”为一个
整数
,它是一个
对象
。它从1.5版开始在Java中可用

列出了可用的装箱转换:

装箱转换将基元类型的表达式转换为 引用类型的对应表达式。具体来说 以下九种转换称为装箱转换:

  • 从布尔类型到布尔类型

  • 从类型字节到类型字节

  • 从短型到短型

  • 从类型char到类型char

  • 从int类型到Integer类型

  • 从long类型到long类型

  • 从类型float到类型float

  • 从double类型到double类型

  • 从空类型到空类型

此外,在方法调用转换过程中允许进行装箱转换,这正是这里要做的。该值正在转换为另一种类型,因为
int
0
正在传递给需要
对象的方法。中列出了装箱转换作为方法调用转换的一种方法:

方法调用上下文允许使用以下内容之一:

  • 身份转换(§5.1.1)

  • 扩大原语转换(§5.1.2)

  • 拓宽参考转换(§5.1.5)

  • 装箱转换(§5.1.7)后可选加宽参考 转化

  • 拆箱转换(§5.1.8)后可选加宽 原语转换


是的,原语转换为对象,反之亦然,这个概念称为装箱和拆箱。在较新版本的java中,这是自动完成的,因此称为自动装箱和自动取消装箱

每个原语都有相应的包装器类

  • 整数->整数
  • 布尔->布尔
  • 字符->字符
诸如此类。

是否使用哈希(41,0)调用哈希(int-seed,Object-Object)?
int i = 1;
Integer boxI = i; // Autoboxing is performed automatically by the compiler

Integer ii = 1;
int i = ii; // Auto(un)boxing is performed automatically by the compiler