object是java里所有类的父类,下面说一下Object类的3个常用方法:toString方法,getClass方法,equals方法。
toString方法:
toString方法没有形参,返回值是一个字符串,内容是对象的信息
public class Main {
public static void main(String[] args) {
Object object=new Object();
System.out.println(object.toString());
}
}
输出结果:
java.lang.Object@15db9742
toString方法返回的字符串是类名@肩上一个十六进制整数
Object类自带的toString方法并没有什么大作用,但是toString方法可以被子类重写,用于输出子类的信息例:
public class Cat {
public int age=0;
private String name;
public Cat(String name,int age) {
// TODO Auto-generated constructor stub
this.name=name;
this.age=age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
//return super.toString();
return "小猫"+this.name+"今年"+this.age+"岁";
}
}
public class Main {
public static void main(String[] args) {
Object object=new Object();
System.out.println(object.toString());
Cat cat=new Cat("Tom", 3);
System.out.println(cat.toString());
}
}
输出结果:
java.lang.Object@15db9742
小猫Tom今年3岁
getClass方法
getClass是一个不可继承的方法,没有形参,它返回一个字符串,字符串内容是该类(子类)的信息equals方法
说道equals方法,就不得不提双等号==,两者都是用于比较数据并返回布尔值
Object类的equals方法和==的区别:
==比较的是比较对象的地址,通常基本数据类型的比较使用==
equals标的是比较对象的内容(储存空间里的内容),通常引用数据类型的比较使用equals方法
例:
public class Main {
public static void main(String[] args) {
Integer i1=10;
Integer i2=10;
Integer i3=new Integer(10);//创建了一个新的对象,引用所指的地址不一样
System.out.println(i1.equals(i2));
System.out.println(i1.equals(i3));
System.out.println(i1==i2);
System.out.println(i1==i3);
}
}
输出结果:
true
true
true
false
例:
public class Point {
private float x=0,y=0;
public Point(Float x) {
// TODO Auto-generated constructor stub
this.x=x;
}
public Point(float x,float y) {
// TODO Auto-generated constructor stub
this.x=x;
this.y=y;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
//return super.equals(obj);
if(this.x==((Point)obj).x||this.y==((Point)obj).y)
return true;
else
return false;
}
public static void main(String[] args) {
Point p1=new Point(10.0f,15.0f);
Point p2=new Point(10.0f,15.0f);
System.out.println(p1.equals(p2));
System.out.println(p1==p2);
}
}
输出结果:
true
false
这里在Point中重写了equals方法,若两点的坐标相同,则返回true,否则返回false
若equals没有重写,上面的程序输出结果是两个false,我猜测这是因为两个Point的对象的this指针不相同所导致。