您的位置:首页 > 移动开发 > Objective-C

Object类之toString方法和equals方法

2018-04-06 21:27 726 查看

Object类之toString方法和equals方法

位于rt.jar\java\lang\Object.class

  注意:Object类是所有类的父类(Java中只有一个根基类,C++中有多个),若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法:

  所有对象,包括数组,都实现了Object类的方法。

  我们写的所有的类都是Object的子类会继承Object这个类所有的属性和所有的方法:

  1) Object中有3个非常重要的方法 hashcode(), toString(), equals(),sun都是建议我们写自己的类的时候,最好都重写上述3个方法

1.toString()方法

描述对象的方法,用一个文本信息来描述当前对象 ,一般是把属性显示出来.

默认调用toString方法的时候,返回的结果:

包名.类名@hashcode;

必须重写该方法

当输出对象的名字的时候,系统就会默认去调用

toString()方法



Object a = new Object();
String b = a.toString();//获得一个对象的字符串,表示形式是一个地址
System.out.println(b);


輸出:java.lang.Object@6d06d69c

类名(对象是该类的一个实列)+@+此对象哈希码的无符号十六进制

2 “==”与equals()

a) “==” : 比较的是基本数据类型的对象,是否相等

eg :
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1==p2);//false


 p1==p2 :比較的是内存地址值,不相等

- b) “equals”:是sun专门用来判断两个对象属性是否相等

方法

3 equals():

a) equals()为什么需要重写?

默认的是比较两个对象的引用是否是同一地址

重写equals()方法后,让他们指向同一个引用,可以判断对象的属性相等

@Override
public boolean equals(Object obj) {
//参数的特殊情况
//null, this, 类型不一致
if(obj==null) return false;
if(obj==this) return true;
if(!(obj instanceof Point)) return false;

Point p = (Point) obj;
return x == p.x &&
y == p.y;
}


4000
String s1 =p1.toString();//获得一个对象的字符串,toString()已被重写
System.out.println(s1);

Object a = new Object();
String b = a.toString();//获得一个对象的字符串,表示形式是一个地址
System.out.println(b);

Point p2 = new Point(3,4);
String s2 = p2.toString();
System.out.println(s2);
/**重写equals()方法后,输出p1==p2:false,p1.equals(p2):true*/
System.out.println(p1==p2);//==比较的是对象内存地址  -false
System.out.println(p1.equals(p2)); //重写equals方法后,它比较的是对象内部属性-true


重写equals()方法后,输出p1==p2:false,p1.equals(p2):true

4 hashCode():

a)hashCode:创建对象在堆内存中的地址值经过一系列

     非常复杂的算法转化而来的一组数字,对开发来说无意义

b)如果两个对象相等话,

第1个条件:equals返回的结果必须是true

第2个条件:必须要有相等的hashCode

c)如果两个对象不相等,则hashCode值一定不等

d)判断对象是否相等的时候,必须要重写equals和

hashCode

5instanceof

判断一个对象是否是某个类的对象

格式: 对象 instanceof 类名

如果是返回true,否则false

if(obj instanceof Point){

Point p = (Point) obj;

Object类中的toString(),equals(), hashCode()方法之间的关系

1、在没有重写之前:

  1) toString()方法返回的是对象的:Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) 比如:com.itheima.hah.Dog@2260e277

  2) equals():对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)克隆的对象和原来的对象不是同一个对象。对象地址不一样

  3) hashCode():由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的)。

  

2、重写之后:

 1) toString()方法一般返回的是:属性的拼接

  @Override

  public String toString() {

    return “Person2 [name=” + name + “, age=” + age + “]”;

  }

  2) equals()方法:重写之后一般只要自定义为两个对象的所有属性值相等就返回为true;

  3) hasdCode():重写hashCode,

  @Override

  public int hashCode()

  {

    final int PRIME = 31;

    int result = 1;

    result = PRIME * result + getId();

    return result;

  }

 

3、总结

  1) 对象相等则hashCode一定相等;

  2) hashCode相等对象未必相等。也就是说两个不同的对象也有可能hashCode(散列码(取余得出的))相同

  判断两个对象是否相等的条件:

  没有重写的话,只要hashCode不相等那么两个对象一定不相同,

  重写的话,首先判断hashCode如果不一样,那么两个对象不相等,如果hashCode一样的话,再比较equals,如果true就相同,否则不相等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐