重写toString()和equals()方法(algs4)

                                               API

public          class     Date2

private  final  int         value;                    

public                       Date2(int m,int d,int y)      构造函数对参数进行移位存储,初试化变量                

public          int          month()

public          int          day()

public          int          year()

public          String     toString()                        重写toString()方法

public          boolean  equals(Object x)              重写equals()方法



package date;
/*封装日期的数据类型的实现*/
public class Date2
{
	private final int value;
	
	public Date2(int m,int d,int y)
	{
		value=(y<<9)+(m<<5)+d;         /*一定要有括号  !!  value=y*512+m*32+d;*/
	}					               /*移位运算符优先级高于">"低于"—"*/
	public int month()
	{
		return (value>>5)%16;         /*value/512%16*/
	}
	public int day()
	{
		return value%32;
	}
	public int year()
	{
		return value>>9;             /*value/512*/
	}
	
	/*
	 * Object类的 toString 方法返回一个字符串,
	 * 该字符串由类名(对象是该类的一个实例)、at标记符“@”和此对象哈希码的无符号十六进制表示组成。
	 * 换句话说,该方法返回一个字符串,它的值等于:
     * public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
     * */
	
	public String toString()
	{
		return month()+"/"+day()+"/"+year();
	}
	
	/*==用于比较引用和比较基本数据类型时具有不同的功能:
     *比较基本数据类型,如果两个值相同,则结果为true
     *而在比较引用时,如果引用指向内存中的同一对象,结果为true
     **/
	
	/*Object类中的equals源码
	  * public boolean equals(Object obj) 
	  * {
           return (this == obj);
       }
   */
	
	/*
	 * equals(),一种等价性关系
	 * 1、自反性:x.equals(x)返回true;
	 * 2、对称性:若x.equals(y)为true,则y.equals(x)亦为true;
	 * 3、传递性:若x.equals(y)为true且y.equals(z)也为true,则x.equals(z)亦为true;
	 * 4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也均为true,前提条件是没有修改x也没有修改y;
	 * 5、非空性:x.equals(null)永远返回为false。
	 * Java为Integer、Double和String等标准数据类型以及一些如File和URL的复杂数据类型提供了实现,
	 * 在处理这些数据类型时,可以直接使用内置的实现。在定义自己的数据类型时需要重载equals()方法
	 * */
	 
	public boolean equals(Object x)
	{
		/*
		 * 检查值是否相同
		 * 1.该对象和参数对象的引用相同,返回true
		 * 2.参数为空(null),根据约定返回false
		 * 3.该对象和参数对象的类不同,返回false
		 * 4.将参数对象的类从Object转换到自定义的数据类型(Date)
		 * 5.任意实例变量的值不相同返回false
		 * */
		if(this==x)
			return true;
		if(x==null)
			return false;
		if(this.getClass()!=x.getClass())
			return false;
		Date2 that=(Date2) x;
		if(this.day()!=that.day())
			return false;
		if(this.month()!=that.month())
			return false;
		if(this.year()!=that.year())
			return false;
		return true;
	}
}













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值