Java学习笔记:to_String(), equals()

Java学习之to_String(), equals()

  • to_String:

    • 返回的是一个字符串

    • 任何一个类都默认继承了Object类,toString()方法在Object内

    • 可以重写toString()

class A
{
}
class TestA
{
    public static void main(String[] args)
    {
        A aa = new A();
        System.out.printf("%s \n", aa.toString());
        //打印出的结果是 A@de3ca2f,A是类名,后面6/8个是类对象地址的16进制  P58讲
        //若改为("%s \n", aa); 输出结果一样
    }
}
  • equals:

    • equals()也是在类Object里面

    • 所以所有类都可以调用equals

    • 它用来判断两个对象的内存地址是否一样,返回值是true/false

class A
{
    public A(int i)
    {
        this.i = i;
    }
}
class Testequals
{
    public static void main(String[] args)
    {
        A a1 = new A(2);
        A a2 = new A(2);
        System.out.println( a1.equals(a2));//判断a1 a2内存地址是否相同
        //虽然两个对象所指堆中保存的值一样,但是地址不同
        // 会返回 false
    }
}
  • 如何重写equals():
    重写equals的目的就是让两个做对比的是一样的,即返回true

重写如下:

class A
{
    public int i;
    public A(int i)
    {
        this.i = i;
    }
    public boolean equals(Object obj)  //一定要有public
    {
        //因为上面传入的参数a2本身已是子类对象,
        //所以这里不用写 Obj aa == new A(); 
        A aa = (A)obj;  //将父类对象obj(此时obj是a2子类对象/引用)强制转换成子类的引用
        if(this.i == aa.i)  //if ( 当前对象的 i 与 obj 的i相等)
            return true;
        else
            return false;
    }
}
  • 注意:
    上面不能写 if (this.i == obj.i),因为父类对象不能直接调用子类特有的属性/方法(成员)

测试看看是否重写了equals:

String a1 = "123";
String a2 = "123";
System.out.println(a1.equals(a2));
//返回的是true, 说明类String 中的equals方法已经重写了 

对于字符串,equals() 比较的是字符串对象指向的内容,而不是对象本身。

扫描二维码关注公众号,回复: 10834528 查看本文章
发布了7 篇原创文章 · 获赞 8 · 访问量 133

猜你喜欢

转载自blog.csdn.net/weixin_44983848/article/details/105508937
今日推荐