验证java引用的小例子
2017-08-10 16:46
176 查看
1. 声明一个变量person指向一个引用对象,
然后将这个person添加到集合list中,
然后将变量person指向null,
问:list中添加的person变成null了吗?
View Code
测试发现:变量person的属性值改变的时候,list中添加的person的属性也同时改变了。
解释:
list集合中加入一个person的引用对象时,是直接指向了堆中的被引用的对象,和栈中的原来的那个person变量已经没有直接关系了,但是他们仍然指向堆中的同一个对象。
当原来的那个person变量指向了别的地方(比如null)的时候,堆中的被引用的对象并没有被改变,list集合中的引用并没有受到影响。
当原来的那个person变量的属性值改变时,其实是改变了堆中被引用的对象的属性值。而这个对象同时也被list集合引用了,所以list集合中的对象属性值也会改变。
然后将这个person添加到集合list中,
然后将变量person指向null,
问:list中添加的person变成null了吗?
import java.util.ArrayList; import java.util.List; public class TestRef { public static void main(String[] args) { Person p = new Person("张三"); List<Person> list = new ArrayList<Person>(); list.add(p); p.setName("李四"); for (Person person : list) { System.out.println(person); // Person [name=李四] } } } class Person { private String name; public Person(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [name=" + name + "]"; } }
View Code
测试发现:变量person的属性值改变的时候,list中添加的person的属性也同时改变了。
解释:
list集合中加入一个person的引用对象时,是直接指向了堆中的被引用的对象,和栈中的原来的那个person变量已经没有直接关系了,但是他们仍然指向堆中的同一个对象。
当原来的那个person变量指向了别的地方(比如null)的时候,堆中的被引用的对象并没有被改变,list集合中的引用并没有受到影响。
当原来的那个person变量的属性值改变时,其实是改变了堆中被引用的对象的属性值。而这个对象同时也被list集合引用了,所以list集合中的对象属性值也会改变。
相关文章推荐
- java 传值与传引用小例子
- 【java】struts和ajax的小例子①→后台的登录验证
- java 考察引用的一个例子
- Java引用传递的一个例子
- Java 使用poi导入excel,结合xml文件进行数据验证的例子
- JAVA 是参数传递 不是引用传递 例子
- java引用类型参数传值的两个很好的例子
- Java 遍历速度例子。 引用。
- Thinking in java 创建一个类,它包含一个未初始化的string引用。验证该引用被初始化成了null
- 服务器端验证-简单例子ValidateLogin.java
- Java 正则表达式的总结和一些小例子(验证和修改过的版本)
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
- Java的四种引用源代码例子
- JAVA 注解验证字段(例子)
- android中引用javascript和在javascript中引用java的简单例子
- Java Web基础:第十六讲 客户端验证的例子
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
- Java的四种引用源代码例子
- JAVA_WEB项目之j使用query的验证框架的例子
- java:对象中引用类型转换的验证