张利 发表于 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是不同的)
这样不是有点掩耳盗铃的感觉..
|