描述:Object类是类层次结构的根类
每个类都使用object作为超类。所有对象(包括数组)都实现这个类的方法
所有类都是object类的子类
我们这里说一下object类中的方法(equals(object obj),getclass(),toString())
1.getclass()方法
返回此对象运行时类的class对象
public class ObjectTest {
public static void main(String[] args) {
stu s1=new stu("哈哈",1,5);
System.out.println(s1.getClass());
}
}
class stu{
private String name;
private int sid;
private int age;
public stu(){}
public stu(String name,int sid,int age){
this.name=name;this.sid=sid;this.age=age;
}
}
执行结果:
class stu
2.toString()方法
api文档是这样描述的:返回该对象的字符串表示。通常,toString
方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
实际上object类中的toString是这样的
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
如果要是不重写这个方法的话,输出结果如下:
public class ObjectTest {
public static void main(String[] args) {
stu s1=new stu("哈哈",1,5);
stu s2=new stu("嘿嘿",2,10);
System.out.println(s1.toString());
}
}
class stu{
private String name;
private int sid;
private int age;
public stu(){}
public stu(String name,int sid,int age){
this.name=name;this.sid=sid;this.age=age;
}
}
很显然这个结果并不容易让人读懂,所以建议重写此方法(重写的方法是按照自己的需求重写的)
stu@14ae5a5
重写之后的我们调用这个toString方法输出一串字符串,将我们这个类的信息输出出来
//重写Object类中的toString方法
public String toString(){
return ("name:"+name+",sid:"+sid+",age"+age);
}
结果:
name:哈哈,sid:1,age5
3.equals方法
从object继承过来之后就可以使用,如果要是不重写此方法的话,那么比较的就是两个地址是否相同,返回的Boolean类型的,一般我们会根据需求来重写
需求:使用equals来判断两个引用变量的值是否相同
class stu{
public boolean equals(Object obj){
//比较的是两个对象的地址 s1和s2
if(this==obj){
return true;
}if(obj instanceof stu){
stu c=(stu)obj; //父类引用不能单独调用子类中的方法
//equals比较的是字符串是否相同
if(!this.name.equals(c.name)){
return false;
//数字常量就不用equals比较了
}if(this.sid!=c.sid){
return false;
}if(this.age!=c.age){
return false;
}return true;
}return false;
}
}
我们在实例化的时候给出的属性值不同,所以根据重写的equals方法来判断
public class ObjectTest {
public static void main(String[] args) {
stu s1=new stu("哈哈",1,5);
stu s2=new stu("嘿嘿",2,10);
System.out.println(s1.toString());
boolean b=s1.equals(s2);
System.out.println(b);
}
}
结果:
false
然而给出的属性值相同了,返回的就是个true了,因为比较的是属性里的值,虽然地址不同但是值是一样的
public class ObjectTest {
public static void main(String[] args) {
stu s1=new stu("哈哈",1,5);
stu s2=new stu("哈哈",1,5);
System.out.println(s1.toString());
boolean b=s1.equals(s2);
System.out.println(b);
}
}
name:哈哈,sid:1,age5
true
测试源码:
public class ObjectTest {
public static void main(String[] args) {
stu s1=new stu("哈哈",1,5);
stu s2=new stu("哈哈",1,5);
System.out.println(s1.toString());
boolean b=s1.equals(s2);
System.out.println(b);
}
}
class stu{
private String name;
private int sid;
private int age;
public stu(){}
public stu(String name,int sid,int age){
this.name=name;this.sid=sid;this.age=age;
}
//重写Object类中的toString方法
public String toString(){
return ("name:"+name+",sid:"+sid+",age"+age);
}
//重写Object类中的equals方法
public boolean equals(Object obj){
//比较的是两个对象的地址
if(this==obj){
return true;
}if(obj instanceof stu){
stu c=(stu)obj; //父类引用不能单独调用子类中的方法
//equals比较的是字符串是否相同
if(!this.name.equals(c.name)){
return false;
//数字常量就不用equals比较了
}if(this.sid!=c.sid){
return false;
}if(this.age!=c.age){
return false;
}return true;
}return false;
}
}