当前位置: 代码迷 >> Java相关 >> 关于final修饰的成员变量
  详细解决方案

关于final修饰的成员变量

热度:372   发布时间:2013-02-05 13:53:51.0
关于final修饰的成员变量
由书本上讲的,final修饰的成员变量一经赋值便不会改变,于是我创建了个类Address,其实例final修饰的 Field为detail,postCode.用两个构造方法对其初始化,
按理说其Field经过其中一个构造方法初始化后其值便不再改变,即Address类的所有对象为同一个对象,所以当用重写的equals方法比较时应返回true,但是测试结果
为false.希望懂的朋友指点迷津。下面是我的代码:
class Address
{
    private final String detail;
    private final String postCode;
    public Address()
    {
        this.detail = "";
        this.postCode = "";
    }
    public Address (String detail, String postCode)
    {
        this.detail = detail;
        this.postCode = postCode;
    }
    public String getDetail()
    {
        return this.detail;
    }
    public String getPostCode()
    {
        return this.postCode;
    }
    public boolean equals(Object obj)
    {
        //Object obj = obj;
        if(this == obj)
        {
            return true;
        }
        if (obj != null && obj.getClass() == Address.class)
        {
            Address ad = (Address)obj;
            if (this.getDetail().equals(ad.getDetail()) && this.getPostCode().equals(ad.getPostCode()))
            {
                return true;
            }
        }
        return false;
    }
    public int hashCode()
    {
        return detail.hashCode() + postCode.hashCode() * 31;
    }
    public void print()
    {
        System.out.println(this.hashCode());
        System.out.println(this.detail);
        System.out.println(this.postCode);
    }
}
public class Test
{
    public static void main(String[] args)
    {
        Address pr1 = new Address();
        Address pr2 = new Address("水月" , "镜花");
        Address pr3 = new Address("loving" , "java");
        pr1.print();
        pr2.print();
        pr3.print();
        //输出false
        System.out.println(pr1.equals(pr2));
        //输出false
        System.out.println(pr2.equals(pr3));
    }
}
搜索更多相关的解决方案: private  测试结果  public  

----------------解决方案--------------------------------------------------------
你的理解有误
按理说其Field经过其中一个构造方法初始化后其值便不再改变,即Address类的所有对象为同一个对象。 这句话是错的!

detail postCode都是成员变量,也就是说在一个实例中,这2个字段是不会改变的(因为final的关系)。在不同的2个实例中,这些字段可以不一样。所以“Address类的所有对象为同一个对象”这句话是错的。

----------------解决方案--------------------------------------------------------
谢谢你,我貌似明白了
----------------解决方案--------------------------------------------------------
  相关解决方案