Object类(鼻祖)

Object类(鼻祖)

  • 是所有类的鼻祖,所有类都直接或间接继承了Object,万物皆对象,为了多态

  • Object中有两个经常被派生类重写的方法:toString();equals()

  • 调用Object类的toString()

    默认返回:类的全称@地址,没有参考意义,所以常常重写toString()来返回具体属性的值。

    注意:StringStringBuilder等都重写了toString()来返回字符串内容了

    • 演示

      public class Point {
          private int x;
          private int y;
          //重写了toStirng
          public Point(int x, int y) {
              this.x = x;
              this.y = y;
          }
      }
      

      测试类

      • 输出引用类型变量时会默认调用Object类的toString()
      public class ObjectDemo {
          public static void main(String[] args) {
              Point p = new Point(100,200);
              System.out.println(p); //输出引用类型变量时会默认调用Object类的toString()
              System.out.println(p.toString());
          }
      }
      
  • 调用Object类的equals()

    默认比较的是还是==(即比较地址),没有参考意义,所以常常重写equals()来比较具体的属性值

    注意:

    1. String类已经重写equals()来比较字符串内容了,但StringBuilder并没有
    2. 重写equals()的基本原则:
      • 原则上要比较两个对象的属性值是否相同
      • 两个对象必须是同一类型的,若类型不同则返回false
    • 演示

      public class Point {
          private int x;
          private int y;
          public Point(int x, int y) {
              this.x = x;
              this.y = y;
          } 
      }
      

      测试类

      • 比较点Point,使用"==",equals()方法
      public class ObjectDemo {
          public static void main(String[] args) {
              Point p1 = new Point(100,200);
              Point p2 = new Point(100,200);
              System.out.println(p1==p2); //false,==比较的是地址
              //因为Point类重写了equals()方法,
              //所以此处调用的是重写之后的equals(),比较的是属性的值是否相同
              System.out.println(p1.equals(p2)); //true
      
      • 比较String字符串,使用equals()方法
              String s1 = new String("hello");
              String s2 = new String("hello");
              //String类重写了equals()来比较字符串内容是否相同
              System.out.println(s1.equals(s2)); //true
      
      • 比较StringBuilder字符串,使用equals()方法比较的是地址,因为StringBuilder没有重写equals()方法
              StringBuilder builder1 = new StringBuilder("hello");
              StringBuilder builder2 = new StringBuilder("hello");
              //StringBuilder类没有重写equals(),因此调用的还是Object类的equals(),比较的还是地址
              System.out.println(builder1.equals(builder2)); //false
              //s1与builder1的类型不同,所以equals()一定为false
              System.out.println(s1.equals(builder1)); //false
          }
      }
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值