Object类的几个方法

 

package  helloWorld;

import  java.util.Hashtable;

public   class  Key  {
    
private String name;
    
private int age;
    
    
public Key(String name, int age) {
        
this.name = name;
        
this.age = age;
    }

    
    
public int getAge() {
        
return age;
    }

    
public void setAge(int age) {
        
this.age = age;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }


    
/**
     * Key key1=new Key("key1",1);
     * Key key2=new Key("key2",2);
     * Key key3=new Key("key1",1);
     * Key key4=key1;
     * 
     * 对象间的比较分两种:
     *     一种是通过比较内存地址是否一致比较是否是同一对象,用==来表示。
     *     如key1和key3内容虽然相同, 但key3是新new的,和key1地址不一样。以上只有key1==key3.
     *     
     *     另一种是按编程人员的眼光看两个对象是否一致,用equals方法来表示,
     *     具体怎么一样是一个属性一样就可以还是需要所有属性都一样这两个对象才equals由
     *     开发人员自己实现这个方法来决定。
     
*/

    
public boolean equals(Object obj) {
        
if (obj instanceof Key)
        
{
            Key key
=(Key)obj;
            
if (name.equals(key.getName())&&age==key.getAge())
                
return true;
            
else return false;
        }

        
else return false;
    }

    
    
/**
     * 当此类的对象做为HashTable的key时,当两个对象既equals且hashCode相同的情况下视为同一个key。
     * 
     *     Hashtable ht=new Hashtable();
     *    ht.put(new Key("Tom",20),"I'm Tom");
     *    ht.put(new Key("Tom",20),"I'm Mike");
     *    ht.put(new Key("Andy",20),"I'm Andy");
     *
     *  ht.get(new Key("Tom",20)结果为 I'm Mike
     *  
     *  JAVA规定两个equals的对象其haseCode也要一样,所以一般情况下这两个方法是同时覆盖的。
     *  
     *  一般几个属性在equals中比较,就用这几个属性的hashCode XOR 即^
     
*/

    
    
public int hashCode() {
        
return name.hashCode()^new Integer(age).hashCode();
    }


    
/**
     * 以对象做为参数打印时显示的文本
     *                      System.out.println(new Key("Andy",20));
     * 如果没覆盖此方法,输出为 helloWorld.Key@1f35b6
     * 如此覆盖后,输出为      Andy,20
     
*/

    
    
public String toString() {
        
return name+","+age;
    }

    
    

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值