美文网首页
java -Object :equals()、tostring(

java -Object :equals()、tostring(

作者: Aimerwhy | 来源:发表于2017-12-09 20:14 被阅读0次

    1 Object类的简介

    1)在Java类继承结构中,java.lang.Object类位于顶端;

    2)如果定义一个Java类时没有使用extents关键字声明其父类,则其父类默认为java.lang.Object类;

    3)Object类型的引用变量可以指向任何类型对象。

    2 重写Object类的toString方法

    方法简介:

    Object类中的重要方法,用于返回对象值的字符串表示

    toString方法不重写时的状况:

    1)Java语言中很多地方会默认调用对象的toString方法:

    例如:System.out.println(任意对象),直接调用toString方法

    2)如果不重写toString方法,将使用Object的toString方法,其调用后的返回值为:

    类名@散列码

    toString方法重写的原因:

    1)toString方法是非常有用的调试工具;

    2)JDK中的标准类库中,许多类都定义了toString方法,方便用户获得有关对象状态的必要信息;

    3)强烈建议为自定义的每个类都增加toString方法。

    4)原则上建议重写,重写的格式大多数遵循”类的名字[域值]”。

    Demo:

    public class Person {

    private String name;

    private int age;

    public Person(String name,int age){

    this.name = name;

    this.age = age;

    }

    //重写toString方法,格式:类名+N个属性值

    public String toString(){

    return "className="+this.getClass().getName()+";

              name="+this.name+";

               age="+this.age;

    }

    public static void main(String[] args) {

    Person p = new Person("hong",21);

    System.out .println(p.toString());

    }

    }

    输出值是:

    className=com.example.objects.Person; name=hong; age=21

    如果不重写toString方法:输出值是:

    com.example.objects.Person@7852e922

    3 重写Object类的equals方法

    简介:

    这个方法判断两个对象是否具有相同的引用,即是否为相同的对象;

    重写equals方法的意义:

    重写该方法,通过比较对象的成员属性,使该方法更有意义。

    实例:

    package com.example.objects;

    public class Person {

    private String name;

    private int age;

    public Person(String name,int age){

    this.name = name;

    this.age = age;

    }

    //重写toString方法,格式:类名+N个属性值

    public String toString(){

    return"className="+this.getClass().getName()+"; name="+this.name+"; age="+this.age;

    }

    //重写equals方法,关键看斜边的第三个if

    public boolean equals(Object obj){

      if(obj==null){

       return false;

    }

      if(this==obj){

      return true;

    }

    if(obj instanceof Person){

    Person person=(Person)obj;

    return person.name==this.name&&person.age==this.age;

    }else{

    return false;

    }

    }

    public static void main(String[] args) {

    Person p = new Person("hong",21);

    Person p2 = new Person("hong",21);

    System.out .println(p.equals(p2));

    }

    }

    输出值是:

    true

    4 equals和==

    (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

    1)“==”比较两个变量本身的值,即两个对象在内存中的首地址。

    2)“equals()”比较字符串中所包含的内容是否相同。

    代码实例:

    (2)对于非字符串对象来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

    class A

    {

    A obj1 = new A();

    A obj2 = new A();

    }

    那么:obj1==obj2是false

    obj1.equals(obj2)也是false

    (3)对于非字符串对象来说,如果重新定义了equals这个方法,而且比较的是值,而不是地址。"=="和"equals"方法的作用则不同了。见下边的例子:

    package com.example.objects;

    public class Animal {

    private String name;

    private int age;

    public Animal(String name,int age){

    this.name = name;

    this.age = age;

    }

    public boolean equals(Object obj){

    if(obj instanceof Animal){

    Animal animal=(Animal)obj;

    return animal.name==this.name&&animal.age==this.age;

    }else{

    return false;

    }

    }

    public static void main(String[] args) {

    Animal a = new Animal("xing",5);

    Animal a2 = new Animal("xing",5);

    System.out.println(a.equals(a2));//true,重写了equals方法

    System.out .println(a==a2);//false,==比较的是地址值,而不是像equals方法,因此是false

    }

    }

    (4)如果是基本类型比较,那么只能用==来比较,不能用equals ,见下边的例子

    int a = 3;

    int b = 4;

    int c = 3;

    System.out.println(a == b);//结果是false

    System.out.println(a == c);//结果是true

    System.out.println(a.equals(c));//错误,编译不能通过

    相关文章

      网友评论

          本文标题:java -Object :equals()、tostring(

          本文链接:https://www.haomeiwen.com/subject/uiypixtx.html