Java 中 int 和 Object 的比较

发布于 2024-09-25 03:31:58 字数 127 浏览 2 评论 0原文

我有以下代码:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

眉黛浅 2024-10-02 03:31:58

这里起作用的是自动装箱。

当您在需要引用时使用原始文字时,原始文字为 自动装箱 为包装类型(在本例中为从 int 到 Integer)。

您的代码与此等效:

Object obj = Integer.valueOf(3);
if ( obj.equals(Integer.valueOf(3)) ) {
    //...

我将让您来决定这是否正确。

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:

Object obj = Integer.valueOf(3);
if ( obj.equals(Integer.valueOf(3)) ) {
    //...

I'll leave it to you to decide whether that's true or not.

莳間冲淡了誓言ζ 2024-10-02 03:31:58

这也很有趣:

Object t = 3;

t.equals( 3 );  // true
3 == t;         // true 

但是

Object h = 128; 

h.equals( 128 ); // true 
128 == h;        // false

.equals 会起作用,因为该值将被比较。 == 使用引用可以工作,但只能从 -128 到 127,因为自动装箱机制使用内部池来保存“最常用”引用。

很奇怪:o == 3 在编译时会失败。

This is also interesting:

Object t = 3;

t.equals( 3 );  // true
3 == t;         // true 

But

Object h = 128; 

h.equals( 128 ); // true 
128 == h;        // false

.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.

卖梦商人 2024-10-02 03:31:58

是的。

这是幕后发生的事情。

Object obj = Integer.valueOf(3);
obj.equals(Integer.valueOf(3));

所以,它们当然是平等的。

Yes.

Here is what's happening behind the scenes.

Object obj = Integer.valueOf(3);
obj.equals(Integer.valueOf(3));

So, of course they are equal.

关于从前 2024-10-02 03:31:58

第一条语句将 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.

我不是你的备胎 2024-10-02 03:31:58

您需要在此处进行类型转换才能完成任务

         Object obj = 3;
         if(obj.equals(Integer.valueOf(3)))
         {
        // to do something....  
         } 

You need to do Type-casting here to achieve the task

         Object obj = 3;
         if(obj.equals(Integer.valueOf(3)))
         {
        // to do something....  
         } 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文