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


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

    1. public class ObjectTest {
    2. public static void main(String[] args) {
    3. Person person=new Person();
    4. }
    5. }
    6. class Person/*extends java.Lang.Object */{
    7. }

    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() 方法对于我们不适用,我们可以对其进行重写

     

    1. public class ObjectTest {
    2. public static void main(String[] args) {
    3. /* int num=65;
    4. char ch='A';
    5. double d1=65.0;
    6. System.out.println(num==ch);
    7. System.out.println(num==d1);
    8. System.out.println(ch==d1);
    9. Person p1=new Person("张三",18);
    10. Person p2=new Person("张三",18);
    11. Person p3=p1;
    12. System.out.println(p1==p2);
    13. System.out.println(p2==p1);
    14. System.out.println(p3==p1);*/
    15. Person p1=new Person("张三",18);
    16. Person p2=new Person("张三",18);
    17. boolean boo1= p1.equals(p2);
    18. System.out.println(boo1);//false---重写后变为:true
    19. String str1=new String("AA");
    20. String str2=new String("AA");
    21. System.out.println(str1.equals(str2));//true
    22. //需求:若两个人的姓名和年龄一样,视为同一个人 (equals()方法返回true )
    23. }
    24. }
    25. class Person/*extends java.Lang.Object */{
    26. private String name;
    27. private int age;
    28. public Person() {
    29. }
    30. public Person(String name, int age) {
    31. this.name = name;
    32. this.age = age;
    33. }
    34. public void setName(String name) {
    35. this.name = name;
    36. }
    37. public void setAge(int age) {
    38. this.age = age;
    39. }
    40. public String getName() {
    41. return name;
    42. }
    43. public int getAge() {
    44. return age;
    45. }
    46. //重写Object类的equals()方法
    47. public boolean equals(Object obj){
    48. if (obj instanceof Person){
    49. Person p=(Person) obj;
    50. if (this.name.equals(p.name)&&this.age==p.age){
    51. return true;
    52. }
    53. }
    54. return false;
    55. }
    56. }

    Exer:

    1. package Object类;
    2. /*
    3. 1.编与Order类,有int型的orderId, String 型的orderName,相应的getter()和setter()方法,
    4. 两个参数的构造器,重写父类的equals()方法:public boolean equals (Object obj),
    5. 并判断测试类中创建的两个对象是否相等。
    6. */
    7. public class OrderTest {
    8. public static void main(String[] args) {
    9. Order o1=new Order(101,"订单1");
    10. Order o2=new Order(101,"订单1");
    11. System.out.println(o1.equals(o2));//false---true
    12. }
    13. }
    14. class Order{
    15. private int orderId;
    16. private String orderName;
    17. public Order() {
    18. }
    19. public Order(int orderId, String orderName) {
    20. this.orderId = orderId;
    21. this.orderName = orderName;
    22. }
    23. public void setOrderId(int orderId) {
    24. this.orderId = orderId;
    25. }
    26. public void setOrderName(String orderName) {
    27. this.orderName = orderName;
    28. }
    29. public int getOrderId() {
    30. return orderId;
    31. }
    32. public String getOrderName() {
    33. return orderName;
    34. }
    35. //重写Object类的equals()方法
    36. public boolean equals (Object obj){
    37. if (this==obj){//如果两个地址值一样
    38. return true;
    39. }
    40. if (obj instanceof Order){
    41. Order o=(Order) obj;
    42. if (this.orderId==o.orderId&&this.orderName.equals(o.orderName)){
    43. return true;
    44. }
    45. }
    46. return false;
    47. }
    48. }

     toString()方法:

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

     

    1. package Object类;
    2. /*
    3. 一.public String toString():返回当前对象的的字符串表现形式
    4. ①在java.lang.Object类中
    5. ②当直接输出对象的引用,默认调用toString()方法
    6. ③Object类中的 toString()方法返回值的格式为:
    7. getClass().getName()+'@'+Integer.toHexString(hashCode());
    8. ④因此,Object类中的 toString() 对于我们来说不适用,我们可以对其重写。
    9. */
    10. public class ToStringTest {
    11. public static void main(String[] args) {
    12. Person p1=new Person("张三",18);
    13. /*String str=p1.toString();
    14. System.out.println(str);*/
    15. System.out.println(p1.toString());
    16. System.out.println(p1);
    17. }
    18. class Person/*extends java.Lang.Object */{
    19. private String name;
    20. private int age;
    21. public Person() {
    22. }
    23. public Person(String name, int age) {
    24. this.name = name;
    25. this.age = age;
    26. }
    27. public void setName(String name) {
    28. this.name = name;
    29. }
    30. public void setAge(int age) {
    31. this.age = age;
    32. }
    33. public String getName() {
    34. return name;
    35. }
    36. public int getAge() {
    37. return age;
    38. }
    39. //重写Object类的equals()方法
    40. public boolean equals(Object obj){
    41. if (obj instanceof Person){
    42. Person p=(Person) obj;
    43. if (this.name.equals(p.name)&&this.age==p.age){
    44. return true;
    45. }
    46. }
    47. return false;
    48. }
    49. //重写Object类的toString()方法
    50. public String toString(){
    51. return "姓名:"+name+" 年龄:"+age;
    52. }
    53. }

    重写前:

    重写后:

     Exer:

    1. package Object类.Exer;
    2. public class GeometricObject {
    3. protected String color;
    4. protected double weight;
    5. public GeometricObject() {
    6. this.color="white";
    7. this.weight=1.0;
    8. }
    9. public GeometricObject(String color, double weight) {
    10. this.color = color;
    11. this.weight = weight;
    12. }
    13. public void setColor(String color) {
    14. this.color = color;
    15. }
    16. public void setWeight(double weight) {
    17. this.weight = weight;
    18. }
    19. public String getColor() {
    20. return color;
    21. }
    22. public double getWeight() {
    23. return weight;
    24. }
    25. }
    26. package Object类.Exer;
    27. import java.awt.*;
    28. public class Circle extends GeometricObject{
    29. private double radius;
    30. public Circle() {
    31. /* this.color="white";
    32. this.weight=1.0;*/
    33. /*super("white",1.0);*/
    34. //super();---隐式
    35. this.radius=1.0;
    36. }
    37. public Circle(double radius) {
    38. this.radius = radius;
    39. }
    40. public Circle(String color, double weight, double radius) {
    41. super(color, weight);
    42. this.radius = radius;
    43. }
    44. public void setRadius(double radius) {
    45. this.radius = radius;
    46. }
    47. public double getRadius() {
    48. return radius;
    49. }
    50. public double findArea(){
    51. return Math.PI*radius*radius;
    52. }
    53. /*
    54. public boolean equals(Object obj){
    55. return (this==obj)
    56. }
    57. */
    58. //重载
    59. public boolean equals(Circle c){
    60. return this.radius==c.radius;
    61. }
    62. public String toString(){
    63. return "圆的半径为:"+radius+" 圆的面积为:"+findArea();
    64. }
    65. }
    66. package Object类.Exer;
    67. public class Test {
    68. public static void main(String[] args) {
    69. /*Circle c1=new Circle();//本态
    70. Circle c2=new Circle();*/
    71. //多态形式创建对象
    72. GeometricObject c1=new Circle();
    73. GeometricObject c2=new Circle();
    74. System.out.println(c1.equals(c2));
    75. System.out.println(c1);
    76. System.out.println(c2);
    77. }
    78. }

    Exer:

    1. package Object类.Exer1;
    2. import com.sun.org.apache.bcel.internal.generic.RET;
    3. public class MyDateTest {
    4. public static void main(String[] args) {
    5. MyDate md1=new MyDate(2021,12,5);
    6. MyDate md2=new MyDate(2021,12,5);
    7. System.out.println(md1.equals(md2));
    8. System.out.println(md1);
    9. System.out.println(md2);
    10. }
    11. }
    12. class MyDate{
    13. private int year;
    14. private int month;
    15. private int day;
    16. public MyDate() {
    17. }
    18. public MyDate(int year, int month, int day) {
    19. this.year = year;
    20. this.month = month;
    21. this.day = day;
    22. }
    23. public void setYear(int year) {
    24. this.year = year;
    25. }
    26. public void setMonth(int month) {
    27. this.month = month;
    28. }
    29. public void setDay(int day) {
    30. this.day = day;
    31. }
    32. public int getYear() {
    33. return year;
    34. }
    35. public int getMonth() {
    36. return month;
    37. }
    38. public int getDay() {
    39. return day;
    40. }
    41. public boolean equals(Object obj){
    42. if (this==obj){
    43. return true;
    44. }
    45. if (obj instanceof MyDate){//instanceof一般用于对象类型强制转换
    46. MyDate md=(MyDate) obj;
    47. if (this.year==md.year&&this.month==md.month&&this.day==md.day) {
    48. return true;
    49. }
    50. }
    51. return false;
    52. }
    53. public String toString(){
    54. return year+"年"+month+"月"+day+"日";
    55. }
    56. }

     

     

  • 相关阅读:
    群硕为多奇妙乐园建设会员运营平台,9个月积累40w会员
    智能化水库监控,水库雨情在线监控系统解决方案
    VSCode 配置 Spring Boot 项目开发环境
    onclick传参的使用遇到XXX is not defined
    pytorch 初始化
    HTML5期末考核大作业,电影网站——橙色国外电影 web期末作业设计网页
    web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)
    C++类和对象的声明、解析、使用(构造、析构函数、友元、命名空间)
    【排序算法】快速排序
    R语言使用马尔可夫链对营销中的渠道归因建模
  • 原文地址:https://blog.csdn.net/m0_54397364/article/details/126272514