标题:关于final修饰的成员变量
只看楼主
fufeng260
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-2-5
结帖率:100%
已结贴  问题点数:20 回复次数:2 
关于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 
2013-02-05 13:53
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
得分:20 
你的理解有误
按理说其Field经过其中一个构造方法初始化后其值便不再改变,即Address类的所有对象为同一个对象。 这句话是错的!

detail postCode都是成员变量,也就是说在一个实例中,这2个字段是不会改变的(因为final的关系)。在不同的2个实例中,这些字段可以不一样。所以“Address类的所有对象为同一个对象”这句话是错的。
2013-02-05 14:43
fufeng260
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-2-5
得分:0 
谢谢你,我貌似明白了
2013-02-06 17:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-398344-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077038 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved