zoukankan      html  css  js  c++  java
  • 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      
  • 相关阅读:
    根据不同运行环境配置和组织node.js应用
    python下pip使用bug汇总
    python的虚拟环境
    nginx使用手册--nginx的命令行参数
    nginx使用手册--nginx.conf文件配置详解
    使用async读取异步数据
    [Bootstrap]组件(三)
    [Bootstrap]组件(二)
    [Bootstrap]组件(一)
    [javascript|基本概念|一元操作符]学习笔记
  • 原文地址:https://www.cnblogs.com/StarKL/p/6138881.html
Copyright © 2011-2022 走看看