Java类字段通过引用?
我创建了以下测试,以了解
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 现在为什么文本字段像静态字段一样被共享? 解决方法
看看这一行: object2 = object1; 这是将object2变量的值设置为与object1变量的值相同.这些变量值都是对象的引用 – 它们本身不是对象. 因此,在该行之后,两个变量都具有引用同一对象的值.如果您通过一个变量更改对象,您仍将通过另一个变量看到该更改.用现实世界的术语来说:假设你有两张纸,每张都有你的家庭住址,并把它们交给两个不同的人.第一个去你的前门涂红色,然后第二个去看你的房子 – 他们仍然会看到一个红色的前门. 将三个概念分开是非常重要的: >对象 变量(或任何其他表达式,实际上)的值始终是原始值(int,char等)或引用.它永远不是一个完整的对象. 更改一个变量的值永远不会更改另一个变量的值,所以这里: String object1 = new String("original"); String object2 = new String("original"); object2 = object1; object2 = "changed"; …我们将object2的值更改为与object1具有相同的值,然后使用不同的值,引用具有“已更改”文本的String对象.这永远不会改变object1的值. 这有帮助吗?如果没有,请询??问非常具体的情况 – 最简单的选择细节而不是概括. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java是否支持Julian日历?
- springboot集成WebSockets广播消息(推荐)
- Python与Java间Socket通信实例代码
- 利用反射获取Java类中的静态变量名及变量值的简单实例
- Java 面向对象之static,final,匿名对象,内部类,包,修饰符
- java – 只能从文件中读取一个整数的最有效的习惯用法?
- java – 可以在我的S3 lambda函数中创建一个文件吗?
- SpringBoot配置SwaggerUI访问404错误的解决方法
- java web将数据导出为Excel格式文件代码片段
- java – 错误(23,17)无法解析junit:junit:4.12 @Android