加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java类字段通过引用?

发布时间:2020-12-15 04:57:51 所属栏目:Java 来源:网络整理
导读:我创建了以下测试,以了解 Java如何处理对象,这让我感到困惑. public class MyClass{ public String text = "original"; public MyClass(String text) { this.text = text; }} 然后我创建了以下两个场景: 1. String object1 = new String("original");String
我创建了以下测试,以了解 Java如何处理对象,这让我感到困惑.

public class MyClass
{
    public String text = "original";
    public MyClass(String text)
    {
        this.text = text;
    }
}

然后我创建了以下两个场景:

1.

String object1 = new String("original");
String object2 = new String("original");
object2 = object1;
object2 = "changed";
System.out.println(object1);
System.out.println(object2);

结果:

original
changed

2.

MyClass object1 = new MyClass("object1");
MyClass object2 = new MyClass("object2");
object2 = object1;
object2.text = "changed";
System.out.println(object1.text);
System.out.println(object2.text);

结果:

changed
changed

现在为什么文本字段像静态字段一样被共享?

解决方法

Now why is the text field shared like a static field?

看看这一行:

object2 = object1;

这是将object2变量的值设置为与object1变量的值相同.这些变量值都是对象的引用 – 它们本身不是对象.

因此,在该行之后,两个变量都具有引用同一对象的值.如果您通过一个变量更改对象,您仍将通过另一个变量看到该更改.用现实世界的术语来说:假设你有两张纸,每张都有你的家庭住址,并把它们交给两个不同的人.第一个去你的前门涂红色,然后第二个去看你的房子 – 他们仍然会看到一个红色的前门.

将三个概念分开是非常重要的:

>对象
>变量
>参考文献

变量(或任何其他表达式,实际上)的值始终是原始值(int,char等)或引用.它永远不是一个完整的对象.

更改一个变量的值永远不会更改另一个变量的值,所以这里:

String object1 = new String("original");
String object2 = new String("original");
object2 = object1;
object2 = "changed";

…我们将object2的值更改为与object1具有相同的值,然后使用不同的值,引用具有“已更改”文本的String对象.这永远不会改变object1的值.

这有帮助吗?如果没有,请询??问非常具体的情况 – 最简单的选择细节而不是概括.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读