Object 类的介绍
java.lang.Object 类
1.Object 类是所以Java类的父类
2.如果在类的声明中未使用extends关键字指定其父类,则默认父类为java.lang.Object类
3.Object 类中的功能(属性、方法)就具有通用性
没有属性,
finalize() 垃圾回收方法
方法:equals() / toString()/getCalss()/hashCode()/ clone()/finalize(
wait()/notify()/notifyAll()
4.Object 类有一个空参构造器
NO | 方法名称 | 类型 | 描述 |
1 | public Object() | 构造 | 构造器 |
2 | public boolean equals() | 方法 | 对象比较 |
3 | public int hashCode() | 方法 | 取得Hash码 |
4 | public String toString() | 方法 | 对象打印时调用 |
==操作符与equals方法
==,运算符
1.可以使用在基本数据类型变量和引用数据类型变量中
2.如果比较的时基本数据类型的变量,比较两个变量保存的数据怒是否相等(不一定类型相同)
3. 如果比较的是引用数据类型,比较的就是两个对象的地址值是否相同
equals方法
1.是一个方法,而非运算符
2.只适用于引用数据类型
3.Object 类中equals 的定义
public boolean equals(Object obj) { return (this == obj); } Object 类中定义的equals方法和==符号相同的 String 类中equals的定义 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
像String、Date、File、包装类等都重写了Object类中的equals()方法,重写以后
比较的不是两个引用的地址是否相同,而是比较两个对象内容是否相同
通常情况下,自定义类如果使用equals()的话,通常也是比较两个对象的“实体
内容”是否相同,那么就需要对equals()方法进行重写
创建类并重写equals方法
package com.chenxi.test; public class Customer { private String name; private int age; public Customer (){} public Customer(String name,int age){ this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } //重写equals方法 public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Customer){ Customer cust= (Customer)obj; if (this.age==cust.age && this.name.equals(cust.name)){ return true; }else { return false; } } return false; } }
idea 自动生成equals 方法 快捷键Alt+Insert 选择equals() and hashCode() 选项进行自动代码生成
点击 Code 菜单中的 Generate…选项 ,也可使用快捷键 alt+insert ,点击 toString() 选项,选择需要包含的成员变量并确定。
自动生成的
@Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Customer)) return false; Customer customer = (Customer) o; return getAge() == customer.getAge() && Objects.equals(getName(), customer.getName()); }对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。 自反性:x.equals(x)必须返回是“true”。 传递性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”, 那么z.equals(x)也应该返回是“true”。 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你 重复x.equals(y)多少次,返回都是“true”。 任何情况下,x.equals(null),永远返回是“false”; x.equals(和x不同类型的对象)永远返回是“false”
toString方法
object类里toString的使用
1.当调用一个对象的引用时,实际上就是调用当前对象toString的引用
2.Object String toString()的定义
Object类中toString()的定义 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
3.像String、Date、Flies、包装类等都重写了Object类中的tostring方法使得在调用对象的toString(),返回“实体内容”信息
4.自定义类也可以重写toString()方法,当调用此方法时返回对象的实体内容
测试类
public class ToStringTest { public static void main(String[] args) { Customer c1 = new Customer(); Customer c2 = new Customer(); System.out.println(c1.toString()); System.out.println(c1); String str1 = new String("MM");//重写过toString System.out.println(str1); } }
customer 类
package com.chenxi.test; public class Customer { private String name; private int age; public Customer (){} public Customer(String name,int age){ this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } }
测试结果
com.chenxi.test.Customer@1540e19d com.chenxi.test.Customer@1540e19d MM
重写customer的toSting方法
package com.chenxi.test; public class Customer { private String name; private int age; public Customer (){} public Customer(String name,int age){ this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return "Customer{" + "name='" + name + '\'' + ", age=" + age + '}'; }
测试结果
Customer{name='null', age=0} Customer{name='null', age=0} MM