Fork me on GitHub

Object类及其常用方法

Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。Object类中三个常用的方法: toString()equals()hashCode()

取得对象信息的方法: toString()

该方法在打印对象时候被调用,将对象信息变为字符串返回,默认输出对象地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Students{
String name= "zhangsan";
int age= 21;
}
public class long1_1{
public static void main(String[] args) {
Students students= new Students();
System.out.println("姓名: "+ students.name+ ", 年龄: "+ students.age);//输出对象属性
System.out.println(students);//直接输出对象信息
System.out.println(students.toString());//调用父类方法输出对象信息
}
}

输出结果:
1
上述结果可看出编译器默认调用toString()方法输出对象,但输出的是对象的地址,我们并不能看懂它的意思。就要通过重写Object类的toString()方法来输出对象属性信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Students{
String name= "zhangsan";
int age= 21;
public String toString() {
return "姓名: "+ name+ ", 年龄: "+ age;
}
}
public class long1_1{
public static void main(String[] args) {
Students students= new Students();
System.out.println("姓名: "+ students.name+ ", 年龄: "+ students.age);//输出对象属性
System.out.println(students);//直接输出对象信息
System.out.println(students.toString());//调用父类方法输出对象信息
}
}

输出结果:
2

对象相等判断方法: equals()

该方法用于比较帝乡是否相等,而且此方法必须被重写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Students{
String name;
int age;
public Students(String name, int age) {
this.name= name;
this.age= age;
}
}
public class long1_1{
public static void main(String[] args) {
Students s1= new Students("zhangsang", 21);
Students s2= new Students("lisi", 21);
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s2)?"s1和s2是同一个人": "s1和s2不是同一个人");
}
}

输出结果:
3
很明显输出的结果是错误的,因为equals()方法比较的是两个对象的地址 ,所以必须重写方法才能到达目的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Student{
String name;
int age;
//重写父类(Object类)中的equals方法
public boolean equals(){
boolean temp;
Student s1 = new Student();
s1.name="张三";s1.age=12;
Student s2 = new Student();
s2.name="张三";s2.age=12;
if((s1.name.equals(s2.name))&&(s1.age==s2.age)){
temp = true;
}
else{
temp = false;
}
return temp;
}
}
public class long1_1{
public static void main(String[] args){
Student s3 = new Student();
System.out.println(s3.equals()?"是同一人":"不是同一人");
}
}

对象签名: hashCode()

该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的hashCode。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Student
{
String name;
int age;
//重写父类(Object类)中的equals方法
public boolean equals(){
boolean temp;
Student s1 = new Student();
s1.name="张三";s1.age=12;
Student s2 = new Student();
s2.name="张三";s2.age=12;
System.out.println("s1的哈希码:"+s1.hashCode());
System.out.println("s2的哈希码:"+s2.hashCode());
if((s1.name.equals(s2.name))&&(s1.age==s2.age)){
temp = true;
}
else{
temp = false;
}
return temp;
}
//重写hashCode()方法
public int hashCode(){
return age*(name.hashCode());
}
}
public class long1_1{
public static void main(String[] args){
Student s3 = new Student();
System.out.println(s3.equals()?"s1和s2是同一人":"s1和s2不是同一人");
}
}

输出结果:
4

Your support will encourage me to continue to create!