/**
* 关于Object类中的toString()方法:
* 1、源码:
* public String toString(){
* return getClass().getName()+"@"+Integer.toHexString(hashCode());
* }
* 源代码上toString()方法默认实现是:
* 类名@对象的内存地址转换为十六进制的形式
* 2、toString()方法可将一个"Java对象"转换成"字符串表示形式"
*
* 3、String类已经重写了equals方法和toString方法,比较两个字符串时直接使用equals和toString;
* 如: String s1 = "hello";
* String s2 = "XD";
* System.out.println(s1.equals(s2)); //不能写成System.out.println(s1==s2)
* //字符串不能使用"=="比较
* String s = new String("nihao");
* System.out.println(s);
* 4、基本数据类型比较使用:"=="
* 引用数据类型比较使用:"equals"
*
* Object类中的equals()方法:
* 1、源码:
* public boolean equals(Object obj){
* return(this == obj);
* }
* 2、equals方法的作用:判断两个Java对象(内容)是否相等(需要重写equals方法)
* 没有重写:Time t1 = new Time(2022,1,1);
* Time t2 = new Time(2022,1,1);
* boolean f = t1.equals(t2);
* System.out.println(f); //这里会输出false,因为equals默认方法中使用的是"=="
* 而"=="比较的是对象的内存地址,t1和t2的内存地址不同。
* *所以使用equals方法时需要考虑比较的内容是否需要重写。
* "=="的作用:判断两个对象的内存地址
* 如: int i=100;
* int j=100;
* System.out.println(i == j); //比较两个基本数据类型之间的值,这两个值内存地址相同
*
*/
public class Test {
public static void main(String[] args){
Time time = new Time(2022,4,27);
System.out.println(time.toString()); //这里可以直接写System.out.println(time);
Time t1 = new Time(2022,1,1);
Time t2 = new Time(2022,1,1);
System.out.println(t1.equals(t2)); //输出true
Time t3 = new Time(2022,1,3);
System.out.println(t2.equals(t3)); //输出false
}
}
class Time{
int year;
int month;
int day;
public Time(){}
public Time(int year,int month,int day){
this.year = year;
this.month = month;
this .day = day;
}
public String toString(){
return year +"年"+month +"月"+ day +"日";
}
/** public boolean equals(Object obj){ //这样子重写效率低,看改良版
//获取第一个日期的数据 t1.equals(t2)这里的t1是第一个数据,t2是第二个数据
// t2第二个数据需要向下转型判断,t1t2对象名不是固定的
// equals(obj)括号中的值为obj
int year1 = this.year;
int month1 = this.month;
int day1 = this.day;
//获取第二个日期的数据
if(obj instanceof Time){
Time t = (Time)obj;
int year2 = t.year;
int monthh2 = t.month;
int day2 = t.day;
if(year1 == year2 && month1 == monthh2 && day1 == day2){
return true;
}
}
return false;
}
*/
//改良版
public boolean equals(Object obj){
if(obj == null || !(obj instanceof Time)){//如果obj为空 或者 obj不是Time,直接返回false
return false;
}
if(this == obj){
return true;
}
Time t = (Time)obj; //这里直接转型,因为前面已经判断过obj了
return this.year == t.year && this.month == t.month && this.day == t.day; //&&为短路与,全相等输出true,反之输出false
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)