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