java -Object :equals()、tostring(

2017-12-09  本文已影响0人  Aimerwhy

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));//错误,编译不能通过

上一篇下一篇

猜你喜欢

热点阅读