目录
一、说明
- Object类是所有Java类的根父类
- 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
public class ObjectTest {
public static void main(String[] args) {
Person p=new Person();
//toString()为Object类的方法,可说明Person是继承于Object类的
System.out.println(p.toString());
}
}
class Person{
}
二、Object类的主要结构
Object类的结构大家可以查看JDK,下图是几个常用的构造器和方法,还有一些方法描述
还有 getClass() 、clone() 、finalize()、wait() 、 notify()、notifyAll()方法
三、Object的使用
下面将主要介绍equals()、toString()方法,其他的方法将在后面的学习中讲到。
1.equals()方法
a.介绍
所有类都继承了Object,也就获得了equals()方法。equals()方法只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。【有兴趣的同学可查看源代码】equals()方法还可以重写,下面将会讲到。
格式:obj1.equals(obj2)
public class ObjectTest {
public static void main(String[] args) {
// Person p=new Person();
//
// //toString()为Object类的方法,可说明Person是继承于Object类的
// System.out.println(p.toString());
//使用equals方法
String str1="Tom";
String str2="June";
System.out.print(str2.equals(str1));//flase
}
}
b.重写规则
当用equals()方法进行比较时,对类File、String、Date及包装类 (Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象; 因为在这些类中重写了Object类的equals()方法。 当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等。
重写规则:【重写的equals()方法,可以直接通过eclipse调用】
- 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是 “true”。
- 自反性:x.equals(x)必须返回是“true”。
- 传递性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”, 那么z.equals(x)也应该返回是“true”。
- 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你 重复x.equals(y)多少次,返回都是“true”。
- 任何情况下,x.equals(null),永远返回是“false”; x.equals(和x不同类型的对象)永远返回是“false”。
public class ObjectTest {
public static void main(String[] args) {
Person p1=new Person("Tom","10001");
Person p2=new Person("Tom","10001");
Person p3=new Person("June","10002");
System.out.println(p1.equals(p2));//true
System.out.println(p1.equals(p3));//false
//toString()为Object类的方法,可说明Person是继承于Object类的
//使用重写后的toString()方法
// System.out.println(p.toString());//Person{name=Tom id=10001}
//使用equals方法
// String str1="Tom";
// String str2="June";
// System.out.print(str2.equals(str1));//flase
//
}
}
class Person{
public String name;
public String id;
public Person(String name,String id) {
this.id=id;
this.name=name;
}
//重写toString方法
@Override
public String toString() {
return "Person{name="+name+"\tid="+id+"}";
}
//系统自动生成的equals()方法
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
2.toString()方法
a.介绍
toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。【有兴趣的同学可查看源代码】toString()也可以进行重写,下面将会讲到。
格式:obj.toString()
public class ObjectTest {
public static void main(String[] args) {
Person p=new Person();
//toString()为Object类的方法,可说明Person是继承于Object类的
//使用toString方法
System.out.println(p.toString());//ClassTest.Object.Person@10dea4e
//使用equals方法
// String str1="Tom";
// String str2="June";
// System.out.print(str2.equals(str1));//flase
//
}
}
class Person{
}
b.重写
像String、Date、File、包装类等都重写了Object类中的toString()方法。使得在调用对象的toString()时,返回"实体内容"信息。自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"
public class ObjectTest {
public static void main(String[] args) {
Person p=new Person();
p.name="Tom";
p.id="10001";
//toString()为Object类的方法,可说明Person是继承于Object类的
//使用重写后的toString()方法
System.out.println(p.toString());//Person{name=Tom id=10001}
//使用equals方法
// String str1="Tom";
// String str2="June";
// System.out.print(str2.equals(str1));//flase
//
}
}
class Person{
public String name;
public String id;
//重写toString方法
@Override
public String toString() {
return "Person{name="+name+"\tid="+id+"}";
}
}