Object类常用方法

 

1、hashCode()方法示例

 1 public class StringDemo {    
 2     public static void main(String[] args){
 3         Student student = new Student();
 4         System.out.println(student);
 5         System.out.println(student.hashCode());
 6     }    
 7 }
 8 
 9 class Student{
10     String name = "FZY";
11 }

● 结果:Student@324e68fb     //打印的地址值

      843999483     //打印哈希算法后的地址值整值

● 注意:这里打印的不是对象的实际地址值,可以理解为逻辑地址值

 

2、getClass()方法示例

 1 public class StringDemo {    
 2     public static void main(String[] args){
 3         Student student = new Student();
 4         Class clazz = student.getClass();//获取该对象的字节码文件
 5         System.out.println(clazz);//打印字节码文件
 6         System.out.println(clazz.getName());//打印字节码文件名
 7     }    
 8 }
 9 
10 class Student{
11     String name = "FZY";
12 }

● 结果:class Student  //该对象的字节码文件

     Student      //字节码文件名

 

3、toString()方法示例

● 源代码:

1 public String toString() {
2         return getClass().getName() + "@" + Integer.toHexString(hashCode());
3 }

由于 Object 中的 toString() 方法没有任何实际意义,所以子类通常会重写 toString()方法。

 1 public class StringDemo {    
 2     public static void main(String[] args){
 3         Student student = new Student();
 4         System.out.println(student.toString());
 5     }    
 6 }
 7 
 8 class Student{
 9     String name = "FZY";
10     @Override
11     public String toString() {
12         return "Student [name=" + name + "]";
13     }
14 }

● 结果:Student [name=FZY]  //重写 toString() 方法后打印的结果

 

4、equals()方法示例

● 源代码:

1     public boolean equals(Object obj) {
2         return (this == obj);
3     }

●示例:

 1 public class StringDemo {    
 2     public static void main(String[] args){
 3         Student student1 = new Student();
 4         Student student2 = new Student();
 5         boolean b = student1.equals(student2);
 6         System.out.println(b);
 7     }    
 8 }
 9 
10 class Student{
11     
12 }

● 结果:false

● 注:比较地址值,和“==”效果一样,一般没有意义,需要重写equals()方法

● 重写 equals()方法示例:

 1 public class StringDemo {    
 2     public static void main(String[] args){
 3         Student student1 = new Student("小红",10);
 4         Student student2 = new Student("小红",10);
 5         boolean b = student1.equals(student2);
 6         System.out.println(b);
 7     }    
 8 }
 9 
10 class Student{
11     String name;
12     int age;
13     public Student(){    
14     }
15     public Student(String name, int age) {
16         this.name = name;
17         this.age = age;
18     }
19     @Override
20     public boolean equals(Object obj) {
21         if(obj == null){//判断对象是否为空
22             return false;
23         }
24         if(this == obj){
25             return true;
26         }
27         if(!(obj instanceof Student)){
28             return false;
29         }
30         Student student = (Student)obj;//向下转型
31         return this.age == student.age && this.name.equals(student.name);
32     }
33 }

● 结果:true  //重写equals方法是比较成员变量的值相等

● 注意:==和equals区别

  ==是一个比较运算符,可以比较基本数据类型的值和引用数据类型的地址值;
  equals是个方法,只能比较引用数据类型,没有重写是Object类中的equals方法,和==号比较引用数据类型无区别,重写后的equals方法是比较对象中的属性。

● instanceof关键字:判断这个引用是否为该类型的引用

posted @ 2018-11-26 14:31  FanYiZhan  阅读(207)  评论(0编辑  收藏  举报