zoukankan      html  css  js  c++  java
  • 《Java中的不可变类》

     1 //不可变类举例:
     2 /*
     3 下面程序试图定义一个不可变类Person类,但=因为Person类包含一个引用类型的成员变量,
     4 且这个引用类是可变类,所以导致Person类也变成了可变类。
     5 */
     6 class Name1
     7 {
     8     private  String firstName;
     9     private  String lastName;
    10     public Name1(){}
    11     public Name1(String firstName,String lastName)
    12     {
    13         this.firstName = firstName;
    14         this.lastName = lastName;
    15     }
    16     public void setFirstName(String firstName){this.firstName = firstName;}
    17     public String getFirstName(){return firstName;}
    18     public void setLastName(String lastName){this.lastName = lastName;}
    19     public String getLastName(){return lastName;}
    20 }
    21 public class Person
    22 {
    23     private final Name1 name;//Person类的引用类型成员变量
    24     public Person(Name1 name)
    25     {
    26         this.name = name;
    27     }
    28     public Name1 getName()
    29     {
    30         return name;
    31     }
    32     public static void main(String[] args) 
    33     {
    34         Name1 n = new Name1("悟空","孙");
    35         Person p = new Person(n);
    36         //Person对象的name的firstName值为“悟空”
    37         System.out.println(p.getName().getFirstName());
    38         System.out.println(p.getName().getLastName());
    39         //改变Person对象的name的firstName值为“八戒”
    40         n.setFirstName("八戒");
    41         System.out.println();
    42         //Person对象的name的firstName的值被改为“八戒”
    43         System.out.println(p.getName().getFirstName());
    44         System.out.println(p.getName().getLastName());
    45     }
    46 }
     1 //不可变类举例:
     2 /*
     3 下面程序试图定义一个不可变类Person类,但=因为Person类包含一个引用类型的成员变量,
     4 且这个引用类是可变类,所以导致Person类也变成了可变类。(这个例子保护了Person对象的
     5 引用类型的成员变量:name,让Person类成为一个真正的不变类)
     6 */
     7 class Name1
     8 {
     9     private  String firstName;
    10     private  String lastName;
    11     public Name1(){}
    12     public Name1(String firstName,String lastName)
    13     {
    14         this.firstName = firstName;
    15         this.lastName = lastName;
    16     }
    17     public void setFirstName(String firstName){this.firstName = firstName;}
    18     public String getFirstName(){return firstName;}
    19     public void setLastName(String lastName){this.lastName = lastName;}
    20     public String getLastName(){return lastName;}
    21 }
    22 public class Person1
    23 {
    24     private final Name1 name;//Person类的引用类型成员变量
    25     public Person1(Name1 name)
    26     {
    27         //设置name实例变量为临时创建的Name对象,该对象的firstName和LastName
    28         //与传入的name参数的firstName和lastName相同
    29         this.name = new Name1(name.getFirstName(),name.getLastName());
    30     }
    31     public Name1 getName()
    32     {
    33         //返回一个匿名对象,该对象的firstName和lastName
    34         //与该对象的name的firstName和LastName相同.
    35         return new Name1(name.getFirstName(),name.getLastName());
    36     }
    37     public static void main(String[] args) 
    38     {
    39         Name1 n = new Name1("悟空","孙");
    40         Person1 p = new Person1(n);
    41         //Person对象的name的firstName值为“悟空”
    42         System.out.println(p.getName().getFirstName());
    43         System.out.println(p.getName().getLastName());
    44         //改变Person对象的name的firstName值为“八戒”
    45         n.setFirstName("八戒");
    46         System.out.println();
    47         //Person对象的name的firstName的值被改为“八戒”
    48         System.out.println(p.getName().getFirstName());
    49         System.out.println(p.getName().getLastName());
    50     }
    51 }
     1 /*
     2 不可变(immutable)类:的意思是创建该类的失利后,该实例的实例变量是不可改变的。
     3 Java提供的8个包装类和java.lang.String类都是不可变类,当创建它们的实例后,其实例变量不可改变。
     4 
     5 */
     6 
     7 //测试Java.lang.String类的equals()方法和hashCode方法()
     8 public class ImmutableStringTest 
     9 {
    10     public static void main(String[] args) 
    11     {
    12         String str1 = new String("Hello");
    13         String str2 = new String("Hello");
    14         System.out.println(str1 == str2);
    15         System.out.println(str1.equals(str2));
    16         //下面两次输出hashCode相等
    17         System.out.println(str1.hashCode());
    18         System.out.println(str2.hashCode());
    19     }
    20 }
  • 相关阅读:
    javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplicati
    了解燃尽图
    hibernate错误org.hibernate.AnnotationException: No identifier specified for entity:
    JGit的常用功能(提交、回滚,日志查询)
    CoverageBuilder
    IntelliJ IDEA生成jar包运行报Error:A JNI error has occurred,please check your installation and try again
    jacoco-实战篇-增量覆盖率
    代码覆盖率-JaCoCo
    Hard voting and Soft Voting
    AP聚类
  • 原文地址:https://www.cnblogs.com/sun-/p/5450571.html
Copyright © 2011-2022 走看看