为什么';是否将.equals(对象)方法的Java autobox int转换为整数?
我正在处理一些java类,并重写为什么';是否将.equals(对象)方法的Java autobox int转换为整数?,java,autoboxing,Java,Autoboxing,我正在处理一些java类,并重写.equals(Object)方法来测试我的类的一个整数变量,当它抛出错误说我不能使用基本类型int时,我感到惊讶,当我确信java文档中说编译器会自动将原始类型自动装箱到方法的包装器类型中时 public boolean equals(Object o) { if (!(o instanceof myClass)) return false; myClass mc = (myClass)o; return (this.my
.equals(Object)
方法来测试我的类的一个整数变量,当它抛出错误说我不能使用基本类型int时,我感到惊讶,当我确信java文档中说编译器会自动将原始类型自动装箱到方法的包装器类型中时
public boolean equals(Object o)
{
if (!(o instanceof myClass))
return false;
myClass mc = (myClass)o;
return (this.myInt.equals(mc.getMyInt()));
}
您可以使用
return(this.myInt==mc.getMyInt())代码>。equals()
方法仅为对象定义。我假设“this.myInt”是一个int而不是整数。自动装箱将在参数中起作用。这里有一些例子
int a = 1;
int b = 1;
Integer c = 1;
Integer d = 1;
a.equals(b); // doesnt work as equals isn't define on int
c.equals(b); // work, c is an Integer/Object and b is autoboxed
c.equals(d); // work, both are Integer/Object
我在这里猜测,但我在想,当方法需要一个整数时,它将自动装箱,但当它需要一个对象时(您可能知道它是一个整数),它将不会自动装箱(包括参数赋值)。您正试图在this.myInt.equals(…)
中使用它,其中myInt
是一个原语。这里没有可用的自动装箱。假设getMyInt()
返回int
,this.myInt()==mc.getMyInt()
可以,正如@Jim所说,只有赋值与自动装箱有关。在Scala中没有类似于隐式的概念可以实现您的期望;)“我确信java文档中说编译器会自动将原始类型自动装箱到方法的包装类型中。”但事实并非如此。看看它到底说了些什么。这还没有明确的定义。事实上,它只有在int很小的情况下才能工作。即使如此,将int与Integer进行比较也可能会令人惊讶。请参阅: