zoukankan      html  css  js  c++  java
  • Object类及其常用方法简介

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

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

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

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

    输出结果:

    姓名:Mary,年龄:21

    ClassNotes.Student@15db9742

    ClassNotes.Student@15db9742

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

    1 class Student
    2 {
    3     String name = "Mary";
    4     int age = 21;
    5     public String toString()
    6     {
    7         return "姓名:"+name+",年龄:"+age;
    8     }
    9 }

    输出结果:姓名:Mary,年龄:21。这样对象信息就更加清晰了。

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

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

     1 class Student
     2 {
     3     String name;
     4     int age;
     5     public Student(String name,int age)
     6     {
     7         this.name=name;
     8         this.age=age;
     9     }
    10 }
    11 
    12 public class Text{
    13     public static void main(String[] args)
    14     {
    15         Student s1 = new Student("Mary",21);
    16         Student s2 = new Student("Mary",21);
    17         System.out.println(s1.equals(s2));//输出一个boolean值
    18         System.out.println(s1.equals(s2)?"s1和s2是同一个人":"s1和s2不是同一个人");//?:条件运算符
    19     }
    20 }

    输出结果:s1s2不是同一个人

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

     1 //重写父类(Object类)中的equals方法
     2 public boolean equals(Object o)
     3 {
     4     boolean temp = true;
     5     Student s1 = this;
     6     if(o instanceof Object)
     7     {
     8         Student s2 = (Student)o;
     9         if(!(s1.name.equals(s2.name)&&s1.age==s2.age))
    10         {
    11             temp = false;
    12         }
    13     }
    14     else
    15     {
    16         temp = false;
    17     }
    18     return temp;//返回一个布尔值
    19 }

    上面的是书上的例子,不太好理解,我自己编了一个equals()方法,简单但不知道对不对:

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

    ***Eclipse偶然发现一个快捷键,按住ctrl+/会注释当前行

    3.对象签名:hashCode()

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

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

    输出结果:

    s1的哈希码:9298668

    s2的哈希码:9298668

    s1s2是同一人

  • 相关阅读:
    New Audio Codec (3) : Design of a Scalable Parametric Audio Coder(可分级正弦模型)
    英国旅游庄园酒店
    圣塔芭芭拉加州大学 信号压缩实验室
    mptkcodec工程(二):VS2008+Win7 编译 mptkcodec(下)
    SPIHT 编码原理,代码,应用,专利问题
    Audio Bandwidth Extension 技术主页
    【quote】free HRTF Databases available online
    New Audio Codec (4) : Daryl Ning 的 Warped LPC and Wavelet Audio Coding 方案
    mptkcodec工程(二):VS2008+Win7 编译 mptkcodec(上)
    mptkcodec工程(一):Cygwin+Win7 编译 mptkcodec
  • 原文地址:https://www.cnblogs.com/wxywxy/p/6740277.html
Copyright © 2011-2022 走看看