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());
}
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
示例
父类
package com.chenxi.exer2; public class GeometricObject { protected String color; //体积 protected double weighgt; protected GeometricObject(){ this.color="white"; this.weighgt=1.0; } // protected GeometricObject(String color,double weighgt){ // this.color = color; // this.weighgt= weighgt; // } public GeometricObject(String color, double weighgt) { this.color = color; this.weighgt = weighgt; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public double getWeighgt() { return weighgt; } public void setWeighgt(double weighgt) { this.weighgt = weighgt; } }
子类
package com.chenxi.exer2; public class Circle extends GeometricObject { private double radius;//半径 public Circle(){ radius = 1.0; } public Circle(double radius){ this.radius = radius; } public Circle(String color, double weighgt, double radius) { super(color, weighgt); this.radius = radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public double findArea(){ return radius*radius*3.14; } public boolean equals(Object obj){ if (this == obj) return true; if (!(obj instanceof Circle)) return false; Circle c1 = (Circle)obj; return c1.getRadius()==getRadius()&& c1.getWeighgt()==getWeighgt()&& c1.getColor()==getColor()&& c1.findArea()==findArea(); } public String toString(){ return "radius是["+radius+"]"; } }
测试类
package com.chenxi.exer2; public class GeometricObjectTest { public static void main(String[] args){ Circle c1 = new Circle("color",8.0,3.0); System.out.println(c1.getRadius()); System.out.println(c1.findArea()); Circle c2 = new Circle("color",8.0,3.0); System.out.println(c2.equals(c1)); } }
测试结果
3.0 28.26 true
Java基础之Object 的方法重写与toString的方法重写
原文:https://www.cnblogs.com/rdchenxi/p/14635609.html