一、Object类
超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
Object类中定义的方法,是所有对象都具备的方法。
二、getClass()方法
public final Class<?> getClass(){}
返回引用中存储的实际对象类型。
应用:通常用于判断两个引用中实际存储对象类型是否一致。
实例:
Student.java:
public class Student {
private String name;
private int age;
// 无参构造
public Student() {
}
// 有参构造
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// get,set方法,可以获取和设置name和age的值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test.java
public class Test {
public static void main(String[] args) {
// getclass()方法
Student s1 = new Student("aaa", 20);
Student s2 = new Student("bbb", 10);
Class<? extends Student> class1 = s1.getClass();
Class<? extends Student> class2 = s2.getClass();
if(class1 == class2){
System.out.println("s1和s2属于同一个类型");
}else {
System.out.println("s1和s2属于同一个类型");
}
}
}
三、hashCode()方法
public int hasnCode(){}
返回该对象的哈希码值
哈希值根据对象的地址或者字符串或者数字,使用hasn算法计算出来int类型的数值。
一般相同对象返回相同的哈希码。
使用上述getClass()方法中的代码,在test.java中加入如下代码:
// hashCode()方法
System.out.println("s1的哈希码值:"+s1.hashCode());
System.out.println("s2的哈希码值:"+s2.hashCode());
Student s3 = s1;
System.out.println("s3的哈希码值:"+s3.hashCode());
输出结果中s1和s3的哈希码值相同。
四、toString()方法
public String toString(){}
返回该对象的字符串表示,默认情况下返回该对象的类型名+该对象的十六进制哈希值;通常可以根据程序需求覆盖该方法,如:展示对象各个属性。
实例:
在Test.java的main中添加:
// toString()方法
System.out.println(s1.toString());
System.out.println(s2.toString());
结果如下:
toString()方法的源码如下:
在Student.java中重写toString()方法:
// 重写toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
Test.java中输出结果为:
五、equals()方法
public boolean equals(Object obj) {}
默认实现为(this == obj),比较两个对象的地址是否相同。
也可以对equals()方法进行重写,比较两个对象的内容是否相等。
重写前:
在Test.java中加入如下代码:
// equals()方法
System.out.println(s1.equals(s2));
Student s4 = new Student("aaaaa",15);
Student s5 = new Student("aaaaa",15);
System.out.println(s4.equals(s5));
输出结果为:
,因为s1、s2是两个不同的对象,地址一定不相等,所以调用equals()方法后就为false;s4和s5虽说传入的值相等,但是对象认识两个不同的,所以结果仍为false。
对equals()方法重写:
在Student.java中加入如下代码:
// 重写equals()方法
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (this == obj)
return true;
if (obj instanceof Student){
Student s = (Student) obj;
if (s.name.equals(this.name) && s.age == this.age)
return true;
}
return false;
}
重写之后的s4和s5调用equals()方法之后结果就为true。
六、代码
Student.java
import java.util.Objects;
public class Student {
private String name;
private int age;
// 无参构造
public Student() {
}
// 有参构造
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// get,set方法,可以获取和设置name和age的值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 重写toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
// 重写equals()方法
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (this == obj)
return true;
if (obj instanceof Student){
Student s = (Student) obj;
if (s.name.equals(this.name) && s.age == this.age)
return true;
}
return false;
}
}
Test.java
public class Test {
public static void main(String[] args) {
Student s1 = new Student("aaa", 20);
Student s2 = new Student("bbb", 10);
Class<? extends Student> class1 = s1.getClass();
Class<? extends Student> class2 = s2.getClass();
if(class1 == class2){
System.out.println("s1和s2属于同一个类型");
}else {
System.out.println("s1和s2属于同一个类型");
}
System.out.println(s1.getClass());
System.out.println("==============================");
// hashCode()方法
System.out.println("s1的哈希码值:"+s1.hashCode());
System.out.println("s2的哈希码值:"+s2.hashCode());
Student s3 = s1;
System.out.println("s3的哈希码值:"+s3.hashCode());
System.out.println("==============================");
// toString()方法
System.out.println(s1.toString());
System.out.println(s2.toString());
System.out.println("==============================");
// equals()方法
System.out.println(s1.equals(s2));
Student s4 = new Student("aaaaa",15);
Student s5 = new Student("aaaaa",15);
System.out.println(s4.equals(s5));
}
}
标签:常用,name,age,Object,System,Student,println,类及,public
From: https://www.cnblogs.com/wml201917205/p/18323644