张利 发表于 2012-11-22 22:52 ![]()  
对于变量的修饰为public static的时候,相当于定义了一个常量,需要直接赋值 
对于final修饰的变量,要求是 ...  
那通过创建对象就可以重新对Address对象Field赋值, 和没有final修饰有什么区别的呢? 
Field用private修饰,没有setter方法再次接受值传递,不用final修饰也一样的啊.. 
 
要创建不可变类如有必要可以重写equals方法和hashCode方法; 下面是修改的程序:- class Address
 
 - {
 
 -         private final String detail;
 
 -         private final String postCode;
 
 -         //在构造器内初始化两个Field
 
 -         //此处省略中间代码
 
 -         ...
 
 -         public String getPostCode()
 
 -         {
 
 -                 return this.postCode;
 
 -         }
 
 -         //重写equals方法判断两个对象是否相等
 
 -         public boolean equals(Object obj)
 
 -         {
 
 -                 if (this == obj)
 
 -                 {
 
 -                         return true;
 
 -                 }
 
 -                 if (obj != null && obj.getClass() == Address.class)
 
 -                 {
 
 -                         Address a = (Address)obj;
 
 -                         if (this.getDetail().equals(a.getDetail()) &&
 
 -                                 this.getPostCode().equals(a.getPostCode()))
 
 -                         {
 
 -                                 return true;
 
 -                         }
 
 -                 }
 
 -                 return false;
 
 -         }
 
 -         public int hashCode()
 
 -         {
 
 -                 return detail.hashCode() + postCode.hashCode();
 
 -         }
 
 - }
 
 - public class OverrideAddress
 
 - {
 
 -         public static void main(String[] args)
 
 -         {
 
 -                 Address add = new Address("哈哈", "呵呵");
 
 -                 System.out.println(add.getDetail() + add.getPostCode());
 
 -                 Address ad = new Address("哈哈", "呵呵");
 
 -                 //判断两个对象Field以及哈希值是否相等,结果为true
 
 -                 System.out.println(add.equals(ad));
 
 -                 System.out.println(add.hashCode() == ad.hashCode());
 
 -         }
 
 - }
 
  复制代码 这是重写后的equals方法和hashCode方法, 是否是通过比较两个对象Field 
如果重新创建对象Field和已有的相同,就表示是不可变类???  (可变类在创建对象后,Field是不同的) 
这样不是有点掩耳盗铃的感觉..   
 |