疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

关于Java的对象equals方法


 

   

  不是所有的equals都是比较整个对象的。

  #1. 普通Object类:

  先看源码:

  public boolean equals(Object obj) {

  return (this == obj);

  }

  看到了没,用"==",比较的是对象引用,也就是地址。假如两个对象传入的参数一样,但是都用new去创建,地址就不同了,那么用equals返回的就是false.

  #2. String类:

  先看源码:

  public boolean equals(Object anObject) {

  if (this == anObject) {

  return true;

  }

  if (anObject instanceof String) {

  String anotherString = (String)anObject;

  int n = count;

  if (n == anotherString.count) {

  char v1[] = value;

  char v2[] = anotherString.value;

  int i = offset;

  int j = anotherString.offset;

  while (n-- != 0) {

  if (v1[i++] != v2[j++])

  return false;

  }

  return true;

  }

  }

  return false;

  }

  比较的是内容,所以只要内容一样,用new去创建的两个String对象,调用equals返回true.

  #3. Integer类

  先看源码:

  public boolean equals(Object obj) {

  if (obj instanceof Integer) {

  return value == ((Integer)obj)。intValue();

  }

  return false;

  }

  一样是比较内容。