太自由

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 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 }

 

posted on 2016-05-01 15:23  太自由  阅读(947)  评论(0编辑  收藏  举报