java.lang.Object类(equals()方法、toString()方法)

 一,java.Lang.Object 类:是所有类的父类。若一个类没有显示的继承任何类时,默认extends java.Lang.Object
①既然Object类是所有类的父类,因此Object类中的内容是最具共性的
②既然Object类是所有类的父类,因此子类可以继承Object类中所有的方法(Object中没有属性)
③既然Object类是所有类的父类,因此若Object类中的方法对于子类来说不适用,子类可以对其进行重写

public class ObjectTest {
    public static void main(String[] args) {
        Person person=new Person();
    }
}
class Person/*extends java.Lang.Object */{
}

equals()方法: 

1.“==”运算符
①基本数据类型:比较两个基本数据类型的 值 是否相等。
②引用数据类型:比较两个引用数据类型的 地址值 是否相等。

2.public boolean equals(Object obj):用于比较二个对象是否相等
①equals方法在java.lang.Object类中            (所有的类都继承了Object类中的equals方法)
②只能比较两个引用数据类型是否相等
③Object类中的 equals() 方法比较两个对象的 地址值 是否相等。(查看源码发现,实际就是“==”完成的)
④若Object类中的 equals() 方法对于我们不适用,我们可以对其进行重写

【面试题】“==”和equals()的区别?-------上述所述
 

2.public boolean equals(Object obj):用于比较二个对象是否相等
①equals方法在java.lang.Object类中            (所有的类都继承了Object类中的equals方法)
②只能比较两个引用数据类型是否相等
③Object类中的 equals() 方法比较两个对象的 地址值 是否相等。(查看源码发现,实际就是“==”完成的)

 查看源码,底层原理:“==”比较两个对象的地址值是否相等

注意:String的equals()方法与Object的equals()方法不同

原因: 

String重写了Object类的equals()方法,比较的是两个字符串的内容

 

 NOW:

若Object类中的 equals() 方法对于我们不适用,我们可以对其进行重写

 

public class ObjectTest {
    public static void main(String[] args) {
       /* int num=65;
        char ch='A';
        double d1=65.0;
        System.out.println(num==ch);
        System.out.println(num==d1);
        System.out.println(ch==d1);

        Person p1=new Person("张三",18);
        Person p2=new Person("张三",18);
        Person p3=p1;

        System.out.println(p1==p2);
        System.out.println(p2==p1);
        System.out.println(p3==p1);*/

        Person p1=new Person("张三",18);
        Person p2=new Person("张三",18);
        boolean boo1= p1.equals(p2);
        System.out.println(boo1);//false---重写后变为:true

        String str1=new String("AA");
        String str2=new String("AA");
        System.out.println(str1.equals(str2));//true

        //需求:若两个人的姓名和年龄一样,视为同一个人  (equals()方法返回true )

    }
}
class Person/*extends java.Lang.Object */{
    private String name;
    private  int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
    //重写Object类的equals()方法
    public boolean equals(Object obj){
        if (obj instanceof Person){
            Person p=(Person) obj;

            if (this.name.equals(p.name)&&this.age==p.age){
                return true;
            }
        }
        return false;
    }
}

Exer:

package Object类;
/*
1.编与Order类,有int型的orderId, String 型的orderName,相应的getter()和setter()方法,
两个参数的构造器,重写父类的equals()方法:public boolean equals (Object obj),
并判断测试类中创建的两个对象是否相等。
 */
public class OrderTest {
    public static void main(String[] args) {
        Order o1=new Order(101,"订单1");
        Order o2=new Order(101,"订单1");
        System.out.println(o1.equals(o2));//false---true

    }
}
class Order{
    private int orderId;
    private String orderName;
    public Order() {
    }
    public Order(int orderId, String orderName) {
        this.orderId = orderId;
        this.orderName = orderName;
    }
    public void setOrderId(int orderId) {
        this.orderId = orderId;
    }
    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }
    public int getOrderId() {
        return orderId;
    }
    public String getOrderName() {
        return orderName;
    }
    //重写Object类的equals()方法
    public boolean equals (Object obj){
        if (this==obj){//如果两个地址值一样
            return true;
        }
        if (obj instanceof Order){
            Order o=(Order) obj;
            if (this.orderId==o.orderId&&this.orderName.equals(o.orderName)){
                return true;
            }
        }
        return false;
    }
}

 toString()方法:

一.public String toString():返回当前对象的的字符串表现形式
①在java.lang.Object类中
②当直接输出对象的引用,默认调用toString()方法
③Object类中的 toString()方法返回值的格式为:
                getClass().getName()+'@'+Integer.toHexString(hashCode());
④因此,Object类中的 toString() 对于我们来说不适用,我们可以对其重写。

 

package Object类;
/*
一.public String toString():返回当前对象的的字符串表现形式
①在java.lang.Object类中
②当直接输出对象的引用,默认调用toString()方法
③Object类中的 toString()方法返回值的格式为:
                getClass().getName()+'@'+Integer.toHexString(hashCode());
④因此,Object类中的 toString() 对于我们来说不适用,我们可以对其重写。
 */

public class ToStringTest {
    public static void main(String[] args) {
        Person p1=new Person("张三",18);
        /*String str=p1.toString();
        System.out.println(str);*/

        System.out.println(p1.toString());
        System.out.println(p1);
    }



class Person/*extends java.Lang.Object */{
    private String name;
    private  int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
    //重写Object类的equals()方法
    public boolean equals(Object obj){
        if (obj instanceof Person){
            Person p=(Person) obj;

            if (this.name.equals(p.name)&&this.age==p.age){
                return true;
            }
        }
        return false;
    }
    //重写Object类的toString()方法
public String toString(){
        return "姓名:"+name+" 年龄:"+age;
    }
}


重写前:

重写后:

 Exer:

package Object类.Exer;

public class GeometricObject {
    protected String color;
    protected double weight;

    public GeometricObject() {
        this.color="white";
        this.weight=1.0;
    }
    public GeometricObject(String color, double weight) {
        this.color = color;
        this.weight = weight;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public void setWeight(double weight) {
        this.weight = weight;
    }
    public String getColor() {
        return color;
    }
    public double getWeight() {
        return weight;
    }
}
package Object类.Exer;

import java.awt.*;

public class Circle extends GeometricObject{
    private double radius;
    public Circle() {
       /* this.color="white";
        this.weight=1.0;*/
        /*super("white",1.0);*/
        //super();---隐式
        this.radius=1.0;
    }
    public Circle(double radius) {
        this.radius = radius;
    }
    public Circle(String color, double weight, double radius) {
        super(color, weight);
        this.radius = radius;
    }
    public void setRadius(double radius) {
        this.radius = radius;
    }
    public double getRadius() {
        return radius;
    }
    public double findArea(){
        return Math.PI*radius*radius;
    }

    /*
    public boolean equals(Object obj){
        return (this==obj)
    }
     */
//重载
    public boolean equals(Circle c){
        return this.radius==c.radius;
    }
    public String toString(){
        return "圆的半径为:"+radius+" 圆的面积为:"+findArea();
    }
}
package Object类.Exer;

public class Test {
    public static void main(String[] args) {
        /*Circle c1=new Circle();//本态
        Circle c2=new Circle();*/
        //多态形式创建对象
        GeometricObject c1=new Circle();
        GeometricObject c2=new Circle();

        System.out.println(c1.equals(c2));
        System.out.println(c1);
        System.out.println(c2);
    }
}

Exer:

package Object类.Exer1;

import com.sun.org.apache.bcel.internal.generic.RET;

public class MyDateTest {
    public static void main(String[] args) {
        MyDate md1=new MyDate(2021,12,5);
        MyDate md2=new MyDate(2021,12,5);
        System.out.println(md1.equals(md2));
        System.out.println(md1);
        System.out.println(md2);
    }

}
class MyDate{
    private int year;
    private int month;
    private int day;

    public MyDate() {
    }

    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public int getMonth() {
        return month;
    }

    public int getDay() {
        return day;
    }
    public boolean equals(Object obj){
        if (this==obj){
            return true;
        }
        if (obj instanceof MyDate){//instanceof一般用于对象类型强制转换
            MyDate md=(MyDate) obj;
            if (this.year==md.year&&this.month==md.month&&this.day==md.day) {
                return true;
            }
        }
        return false;
    }
    public String toString(){
        return year+"年"+month+"月"+day+"日";
    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值