java不可变类
2020-02-04 13:43
148 查看
java不可变类
不可变类-生命周期里一直保持初始化状态
如果要创建不可变类尤其要注意其引用类型的成员,引用类型常量虽然不能重新赋值,但其所指向的类容还是会发生改变
public class Person { //本意设置为不可变类 private final Name name; //该变量为引用类型变量虽然不能重新赋值,但其所指向的类容还是会发生改变 public Person(Name name){ // this.name=name; //接受了外部传过来的引用,导致name指向的内容会被修改不符合不可变类的本意,应该为下面形式,只接受外部传递的值 this.name=new Name(name.getFirstName(),name.getLaseName()); } public Name getName(){ // return name; //将name的引用传递给外部会导致name里的内容被修改,应改为下面形式 return new Name(name.getFirstName(),name.getLaseName()); } public static void main(String[] args) { Name n=new Name("悟空","孙"); Person p=new Person(n); System.out.println(p.getName().getFirstName()); n.setFirstName("八戒"); System.out.println(p.getName().getFirstName()); n=p.getName(); n.setFirstName("八戒"); System.out.println(p.getName().getFirstName()); } }
public class Name { private String firstName; private String laseName; public Name(){} public Name(String firsName,String laseName){ super(); this.firstName=firsName; this.setLaseName(laseName); } public String getFirstName(){ return this.firstName; } public void setFirstName(String firstName){ this.firstName=firstName; } public String getLaseName() { return laseName; } public void setLaseName(String laseName) { this.laseName = laseName; } }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java的不可变类
- Java基础查漏补缺:String为什么不可修改
- JAVA的可变类与不可变类
- Java微框架:不可忽视的新趋势--转载
- Java中常用的集合---初学者的你不可错过的精编整理
- java 不可变类型
- java基础入门-你不知道的string-不可改变性与编译器优化
- Java不可改变字符串
- Java 基于数组自定义实现容量不可变向量Vector
- Java开发不可忽视的小细节(不断总结中...)
- C# vs Java:C# 五个不可替代的特性瞬间秒杀 Java
- 你不可不知的Java引用类型之——WeakReference源码详解
- JAVA不可变类(immutable)机制与String的不可变性
- 解决Java提示“编码GBK的不可映射字符”的问题
- JAVA的可变类与不可变类
- JAVA不可变类(immutable)机制与String的不可变性(推荐)
- 从字节码和JVM的角度解析Java核心类String的不可变特性
- 警告:编码 utf8 的不可映射字符 ANT编译java文件的问题
- 为什么Java的string类要设成immutable(不可变的)
- 【问题一】notepad++编辑器写Java代码,无法编译出现错误:编码GBK的不可映射字符