Java 中 int 和 Object 的比较
我有以下代码:
Object obj = 3;
//obj.equals(3); // so is this true?
obj
等于 3 吗?
I have the following code:
Object obj = 3;
//obj.equals(3); // so is this true?
Does obj
equal to 3?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这里起作用的是自动装箱。
当您在需要引用时使用原始文字时,原始文字为 自动装箱 为包装类型(在本例中为从 int 到 Integer)。
您的代码与此等效:
我将让您来决定这是否正确。
What's at play here is autoboxing.
When you use a primitive literal when a reference is expected, the primitive is autoboxed to the wrapper type (in this case from int to Integer).
Your code is the equivalent of this:
I'll leave it to you to decide whether that's true or not.
这也很有趣:
但是
.equals
会起作用,因为该值将被比较。==
使用引用可以工作,但只能从 -128 到 127,因为自动装箱机制使用内部池来保存“最常用”引用。很奇怪:
o == 3
在编译时会失败。This is also interesting:
But
.equals
will work, becase the value will be compared.==
Will work, using the references, but only from -128 to 127, because the autoboxing mechanism, uses an internal pool to hold "most commonly used" references.Strange enough:
o == 3
will fail at compile time.是的。
这是幕后发生的事情。
所以,它们当然是平等的。
Yes.
Here is what's happening behind the scenes.
So, of course they are equal.
第一条语句将 obj 设置为自动装箱的 Integer(与 Integer.valueOf(3) 相同),
因此第二条语句将返回 true。
The first statement will set obj to be a automatically boxed Integer (the same as Integer.valueOf(3))
Hence the second statement will return true.
您需要在此处进行类型转换才能完成任务
You need to do Type-casting here to achieve the task