java学习中,object 对象的使用(toString、equals、hashCode)(java 学习中的小记录)

java学习中,object 对象的使用(java 学习中的小记录)作者:王可利(Star·星星)

object 对象(参考API学习

重点掌握三个方法:

1.toString 返回该对象的字符串表示。

2.equals(object obj)指示其他某个对象是否与这个对象相等。

3.hashCode() 返回对象的哈希码。

详见代码的注释分析(一个是Person类重写方法,一个是Star类使用方法)

Star类代码:

 1 package study;
 2 
 3 public class star {
 4     public static void main(String[] args) {    
 5         
 6         //创建object对象
 7         Object o = new Object();
 8         
 9         //1.toString
10         String str = o.toString();
11         System.out.println(str);//java.lang.Object@5cfe174  打印的是类的全名+地址
12         System.out.println(o);//java.lang.Object@5cfe174 
13         //println(object o) 内部实现应该是 o.toString
14         //Ctrl + 鼠标左键看源码    ,源码的包是 src压缩包 jdk里面
15         
16         //需求:有一个Person类   有两个属性name、age,现在想要在打印Person对象的时候直接输出name和age。
17         Person p = new Person("星星",12);
18         System.out.println(p);
19         //打印上面的类的全名+地址 没有什么意义
20         //一般在类中都会重写toString方法。
21         
22         //2.equals :用来比较两个对象 是否是同一个对象,实际上是比较两个对象的地址值。
23         Object o1 = new Object();
24         Object o2 = new Object();
25         Object o3 = o1;
26         System.out.println(o1.equals(o2));//false
27         System.out.println(o1.equals(o3));//true
28         
29         Person p1 = new Person("小星星", 15);
30         Person p2 = new Person("小星星", 15);
31         //描述的就是一个对象,但是内存中是两个对象。
32         //需求equals来比较,如果我描述的是同一个对象就打印true,否则false
33         //重写equals方法
34         System.out.println(p1.equals(p2));
35         
36         //Api 里面当此方法被重写时,通常 有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等的对象必须要有相等的哈希码
37         System.out.println(p1.hashCode());
38         System.out.println(p2.hashCode());
39    }
40 }

Person类代码:

 1 package study;
 2 
 3 import javax.print.attribute.HashAttributeSet;
 4 
 5 public class Person {
 6     String name;
 7     int age;
 8     public Person(String name,int age) {
 9         this.name = name;
10         this.age = age;
11     }
12     
13     //重写toSting方法
14     @Override
15     public String toString() {
16         // TODO Auto-generated method stub
17         
18         return "name  = "+name+" age = "+age;
19     }
20     
21     
22     //重写equals方法
23     @Override
24     public boolean equals(Object obj) {
25         // TODO Auto-generated method stub
26         Person p = null;
27         if (obj instanceof Person) {
28             //多态需要强转,父类不能访问子类特有的属性
29             p =(Person)obj;
30             if (p.name.equals(this.name)) {
31                 return true;//名字一样是对的
32             }else{
33                 return false;//名字不一样不是一个对象
34             }
35         }else{
36         return false;//不是这个类是错的
37     }
38 }
39   //重写哈希码 hashCode
40     @Override
41     public int hashCode() {
42         
43         return this.name.hashCode();
44     }
45 }
46      
原文地址:https://www.cnblogs.com/StarKL/p/6138881.html