Java中所有类的基类——Object

173 阅读2分钟

Object类及一些注意事项

Object类规定一些方法

toString方法

equals方法【重点】

hashCode方法

Object类规定一些方法

1. String toString();
当前对象建议String类型描述。默认情况是当前类所属包名.类名@十六位内存地址
2. int hashCode();
内存中当前对象的唯一索引值,默认情况下是当前 对象所处空间首地址的十进制展示
3. boolean equals(Object obj);
判断两个对象是否一致,默认是比较两个对象的地址
【注意】:
	如果两个对象的equals比较方法为true,则要求两个对象的hashCode()必
    须一致

toString方法

private int size = 0;
private Node<E> first;
private Node<E> last;
@Override
 public String toString() {
  	return "MyLinkedList [size=" + size + ", first=" + first + ", last=" + last + "]";
 	}
 }
在eclipse中可以 Alt + Shift + S 快捷键重写

equals方法【重点】

比较两个对象是否一致,在Object类内默认方式是比较 两个对象的地址是否一致。
但是有一种情况不符合我们所期望的情况:
       需要比较的是两个对象中保存的内容是一致的,但是使用Object类内继承而来
的equals方法是不合适的
Student student1 = new Student(1, "小明", 16, '男');
Student student2 = new Student(1, "小明", 16, '男');
比如在这里,我们新建了两个对象,它们的的成员变量是一致的,但是它们所处的地址
空间不同,所以在使用equals方法进行比较时会返回false,此时按照我们的需求我们
需要重写equals方法.
@Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (!(obj instanceof Student))
   return false;
  Student other = (Student) obj;
  return age == other.age && gender == other.gender && id == other.id && Objects.equals(name, other.name);
 }
@Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  Student other = (Student) obj;
  return age == other.age && gender == other.gender && id == other.id && Objects.equals(name, other.name);
 }
以上两种写法都可以满足需求,但是在我们重写equals后,千万别忘了重写 hasCode()
方法
补充:
	instanceof 是判定一个对象是否为一个类的实例

hashCode方法

@Override
 public int hashCode() {
  return Objects.hash(age, gender, id, name);
 }
以上代码均可以在eclipse中使用 shift + alt + s 选择generate hasCode() and 
equals()可以进行快捷生成

【注意】 当重写完之后再次创建具有相同的成员变量的两个对象时,他们的hashCode()的值是一致的,但这个值代表的并非该对象首地址的十进制表示,也就是此时的hashCode与该对象的地址没有任何关系。

最后

上面都是自己整理好的!我就把资料贡献出来给有需要的人!顺便求一波关注,哈哈~各位小伙伴关注我后私信【Java】就可以免费领取哒

原文作者:0菜鸡小白0

原文链接:blog.csdn.net/weixin_4393…