Java Object类
~程序媛~ 人气:0任何一个类默认继承Object类,就算没有直接继承,最终也会间接继承。
Object类,有两种方式找到:
- 第一种:在源码当中找到
- 第二种:查阅java类库的帮助文档
Object类中两个重要的方法:
- boolean equals (Object obj) //判断两个对象是否相等
- String toString () //将对象转换成字符串形式
equals方法:
源代码:
public boolean equals(Object obj) { return (this == obj); }
作用:通过调用这个方法可以判断两个对象是否相等
class MyTime { int year; int month; int day; public MyTime() { super(); } public MyTime(int year, int month, int day) { super(); this.year = year; this.month = month; this.day = day; } }
public class Test02 { public static void main(String args[]) { // 判断两个基本数据类型的数据是否相等,,直接使用”==“就行 int a = 100; int b = 100; // 这个等号判断的是a中保存的100和b中保存的100是否相等 System.out.println(a == b);// true(相等) false(不相等) 结果为true MyTime t1 = new MyTime(2021, 9, 15); MyTime t2 = new MyTime(2021, 9, 15); // 这个等号判断的是t1保存的对象的内存地址和t2保存的对象的内存地址是否相等 System.out.println(t1 == t2);// 结果为false } }
// 重写Object的equals方法之前(比较的是内存地址) boolean s = t1.equals(t2); System.out.println(s);// 结果为false
判断两个对象是否相等不能用“==”,因为”==“判断的是两个对象的内存地址,然而在Object类中的equals方法当中,默认采用的是”==“判断两个java对象是否相等。而”==“判断的是两个java对象的内存地址是否相等,我们应该判断的是两个java对象的内容是否相等,equals方法无法满足,需要子类重写equals。
public boolean equals(Object obj) { // 当年月日都分别相等时,表示两个日期相同 // 获取第一个日期的年月日 int year1 = this.year; int month1 = this.month; int day1 = this.day; // 获取第二个日期的年月日 if (obj instanceof MyTime) { MyTime t = (MyTime) obj; int year2 = t.year; int month2 = t.month; int day2 = t.day; if (year1 == year2 && month1 == month2 && day1 == day2) { return true; } } return false; }
// 重写Object的equals方法之后(比较的是内容) boolean t = t1.equals(t2); System.out.println(s);// 结果为true
toString方法:
源代码:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
源代码上toString方法的默认实现:类名@对象的内存地址转换为十六进制的形式。
作用:通过调用这个方法可以将一个“Java对象”转换成“字符串形式的表示形式“。(建议所有子类都重写此方法)
class MyTime { int year; int month; int day; public MyTime() { super(); } public MyTime(int year, int month, int day) { super(); this.year = year; this.month = month; this.day = day; } @Override public String toString() { return "MyTime [year=" + year + ", month=" + month + ", day=" + day + "]"; } }
public class Test01 { public static void main(String args[]) { MyTime t1 = new MyTime(2021, 9, 15); String s1 = t1.toString(); // MyTime类重写toString方法之前 System.out.println(s1);// com.MyTime@15db9742 // MyTime类重写toString方法之后 System.out.println(s1);// MyTime [year=2021, month=9, day=15] } }
注:输出引用时,会自动调用toString方法,即s1等同于s1.toString()。
加载全部内容