Object
类(鼻祖)
-
是所有类的鼻祖,所有类都直接或间接继承了
Object
,万物皆对象,为了多态 -
Object
中有两个经常被派生类重写的方法:toString
();equals
() -
调用
Object
类的toString
()默认返回:类的全称@地址,没有参考意义,所以常常重写
toString
()来返回具体属性的值。注意:
String
、StringBuilder
等都重写了toString
()来返回字符串内容了-
演示
点
public class Point { private int x; private int y; //重写了toStirng public Point(int x, int y) { this.x = x; this.y = y; } }
测试类
- 输出引用类型变量时会默认调用Object类的toString()
public class ObjectDemo { public static void main(String[] args) { Point p = new Point(100,200); System.out.println(p); //输出引用类型变量时会默认调用Object类的toString() System.out.println(p.toString()); } }
-
-
调用
Object
类的equals()
默认比较的是还是
==
(即比较地址),没有参考意义,所以常常重写equals()
来比较具体的属性值注意:
String
类已经重写equals()
来比较字符串内容了,但StringBuilder
并没有- 重写
equals()
的基本原则:- 原则上要比较两个对象的属性值是否相同
- 两个对象必须是同一类型的,若类型不同则返回
false
-
演示
点
public class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } }
测试类
- 比较点
Point
,使用"==
",equals()
方法
public class ObjectDemo { public static void main(String[] args) { Point p1 = new Point(100,200); Point p2 = new Point(100,200); System.out.println(p1==p2); //false,==比较的是地址 //因为Point类重写了equals()方法, //所以此处调用的是重写之后的equals(),比较的是属性的值是否相同 System.out.println(p1.equals(p2)); //true
- 比较
String
字符串,使用equals()
方法
String s1 = new String("hello"); String s2 = new String("hello"); //String类重写了equals()来比较字符串内容是否相同 System.out.println(s1.equals(s2)); //true
- 比较
StringBuilder
字符串,使用equals()
方法比较的是地址,因为StringBuilder
没有重写equals()
方法
StringBuilder builder1 = new StringBuilder("hello"); StringBuilder builder2 = new StringBuilder("hello"); //StringBuilder类没有重写equals(),因此调用的还是Object类的equals(),比较的还是地址 System.out.println(builder1.equals(builder2)); //false //s1与builder1的类型不同,所以equals()一定为false System.out.println(s1.equals(builder1)); //false } }
- 比较点