Object

Object

toString()方法
  1. Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息
  2. 在进行String与其他类型数据的连续操作时(如:System.out.println("Dog: "+dog)),将自动调用该对象类的toString()方法。
  3. 可以根据需要在用户自定义类型中重写toString()方法。
package Test03;public class TestoString {
   public static void main(String[] args) {
       Dog dog = new Dog();
       System.out.println("Dog: "+dog);//相当于System.out.println("Dog: "+dog.toString());
       Cat cat = new Cat();
       System.out.println("Cat: "+cat);
  }
}class Dog{}class Cat{
   //重写的toString方法
   public String toString(){
       return "I`m Cat";
  }
}

equals()方法

我们先看看官方文档的解释

  1. 自反性:对于任何非空的参考价值x,x.equals(x)应该返回true。
  2. 对称性:对于任何非空的参考值x和y,x.equals(y)应该返回true当且仅当y.equals(x)返回true。
  3. 传递性:对于任何非空的参考值x,y,和z,如果x.equals(y)返回true和y.equals(z)返回true,然后x.equals(z)应该返回true。
  4. 一致性:对于任何非空的参考值x和y,多次调用x.equals(y)始终返回true或始终返回false,没有提供信息用于equals比较对象被修改。
  5. 对于任何非空的参考价值x,x.equals(null)应该返回false。

以上是来自官方API文档的解释

从几点我们看到equals()方法的作用是判断该对象与指定对象是否相等。

public class equals {
    public static void main(String[] args) {
        Cat c1 = new Cat(1,2,3);
        Cat c2 = new Cat(1,2,3);
        System.out.println(c1.equals(c2));
    }
}

class Cat{
    int color;
    int height;
    int weight;

    public Cat(int color,int height,int weight){
        this.color = color;
        this.height = height;
        this.weight = weight;
    }


}
输出false

这是因为我们使用equals()方法进行比较的是两者在内存中的地址
在这里插入图片描述

所以我们要对 对象的equals()方法进行重写

 //这个是一个重写的equals方法
    public boolean equals(Object obj){
        //先判断obj是否为空
        if (obj == null){
            return false;
        } else {
            // instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例
            //然后去判断obj 是否属于 Cat类
            if (obj instanceof Cat){
                //当obj 是一个 Cat类时
                //会将 obj强制转换为 Cat类
                Cat c = (Cat) obj;
                //判断 obj(传入的)的所有属性 与 本身对象的属性 进行比较
                if (c.color == this.color && c.weight == this.weight && this.height == height){
                    //相同返回true
                    return true;
                }
            }
        }
        return false;
    }

再进行输出

输出true

但我们用String的equals()方法

    public static void main(String[] args) {
        String s1 = new String();
        String s2 = new String();
        System.out.println(s1.equals(s2));
    }
返回true

证明String的equals()方法是经过重写的

public boolean equals(Object anObject) {
        //判断anObject(传入的)是否是相同的对象
        if (this == anObject) {
            return true;
        }
        //判断是否属于String类
        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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值