首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java中的包装类不像引用类型?

为什么Java中的包装类不像引用类型?
EN

Stack Overflow用户
提问于 2017-06-25 12:28:57
回答 4查看 678关注 0票数 5

我有一个很大的问题要理解为什么Java中的包装类不像引用类型。示例:

代码语言:javascript
复制
Integer one = 10;
Integer two = one;
one = 20;
System.out.println(one);
System.out.println(two);

产出如下:

20

10

我认为two应该是20,在这个例子中,我创建了自己的类:

代码语言:javascript
复制
class OwnInteger {
        private int integer;

        public OwnInteger(int integer) {
            this.integer = integer;
        }

        public int getInteger() {
            return integer;
        }

        public void setInteger(int integer) {
            this.integer = integer;
        }
    }

    OwnInteger one = new OwnInteger(10);
    OwnInteger two = one;
    one.setInteger(20);
    System.out.println(one.getInteger());
    System.out.println(two.getInteger());

那么问题是,Integer包装类特别吗?为什么它表现得像我在我的例子中所显示的那样?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-25 12:32:15

这正是引用类型的行为。在您的示例中,two在赋值后引用与one相同的对象。但是,重新分配one一个新对象对two没有任何影响,这是您所看到的行为。

例如,在其他引用对象中也会看到相同的行为。

代码语言:javascript
复制
StringBuilder one = new StringBuilder("10");
StringBuilder two = one;
one = new StringBuilder("20");
// two still references StringBuilder with "10"

为了使引用类在更改一个对象也更改另一个对象时显示出行为,类需要是可变的,就像代码中的OwnInteger类一样,代码需要更改对象,而不是重新分配对象。包装类(如Integer )是不可变的,因此您不会使用它们来体验这种行为。

票数 8
EN

Stack Overflow用户

发布于 2017-06-25 12:32:01

我以为两个人才20岁.

诺普,当你这么做时

代码语言:javascript
复制
Integer two = one;
one = 20;

实际上,您正在将一个新对象分配给变量one,并且变量two不会随着这些更改而更新.

到您的类OwnInteger

代码语言:javascript
复制
OwnInteger one = new OwnInteger(10);
OwnInteger two = one;
one.setInteger(20);

因为onetwo指向相同的引用,所以它们做了您期望的事情。

代码A将等效于

代码语言:javascript
复制
OwnInteger one = new OwnInteger(10);
OwnInteger two = one;
one = new OwnInteger(20); //one.setInteger(20);
票数 3
EN

Stack Overflow用户

发布于 2017-06-25 12:38:58

代码语言:javascript
复制
one = 20;

使用“装箱”,实际上相当于:

代码语言:javascript
复制
one = Integer.valueOf(20);

在您的示例中,valueOf方法创建一个新对象并返回该新创建对象的引用,因为以前缓存中不存在该对象。

对于您自己的类onetwo,两个引用变量都指向同一个对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44746379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档