• Java学习 --- ==运算符与equals方法


    目录

    一、==运算符

    二、equals方法

    三、相关案例


    一、==运算符

    1、既可以判断基本类型,也可以判断引用类型

    2、当判断基本类型时,判断的是值是否相等。

    3、当判断引用类型时,判断的是地址是否相等,即判定是不是同一对象。

    1. public class Test02 {
    2. public static void main(String[] args) {
    3. A a = new A();
    4. A b = a;
    5. A c = b;
    6. System.out.println(a == b);//true
    7. System.out.println(b == c);//true
    8. B d = a;
    9. System.out.println(d == a);//true
    10. int num1 = 1;
    11. int num2 = 1;
    12. System.out.println(num1 == num2);//true
    13. }
    14. }
    15. class A extends B{}
    16. class B {}

    二、equals方法

    1、equals是Object方法,只能判断引用类型。

    2、默认判断地址是否相等,子类中往往重写该方法,用于判断内容是否相等

    string类的equals方法源码:

    /**
     * public boolean equals(Object anObject) {
     *             if (this == anObject) {//传入的对象相同
     *                 return true;//返回true
     *             }
     *             if (anObject instanceof String) { //判断类型是否是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; //当两个字符串所有字符都相等,就返回true
     *                 }
     *             }
     *             return false;
     *         }
     */

     Object类的equals源码

    /**默认也是比较对象地址是否相同即判断是否是同一对象
     *  public boolean equals(Object obj) {
     *         return (this == obj);
     *     }
     */
    
    1. public class Test03 {
    2. public static void main(String[] args) {
    3. Integer integer1 = new Integer(5);
    4. Integer integer2 = new Integer(5);
    5. System.out.println(integer1 == integer2);//false
    6. System.out.println(integer1.equals(integer2));//true
    7. String str1 = new String("aa");
    8. String str2 = new String("aa");
    9. System.out.println(str1 == str2);//false
    10. System.out.println(str1.equals(str2));//true
    11. }
    12. }

    三、相关案例

    1、判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都一样就返回true,反之返回false。

    参考代码:

    1. public class Test04 {
    2. public static void main(String[] args) {
    3. Person person1 = new Person("小明", 25, '男');
    4. Person person2 = new Person("小明", 25, '男');
    5. System.out.println(person1.equals(person2));
    6. }
    7. }
    8. class Person{
    9. private String name;
    10. private int age;
    11. private char gender;
    12. public Person(String name, int age, char gender) {
    13. this.name = name;
    14. this.age = age;
    15. this.gender = gender;
    16. }
    17. public String getName() {
    18. return name;
    19. }
    20. public void setName(String name) {
    21. this.name = name;
    22. }
    23. public int getAge() {
    24. return age;
    25. }
    26. public void setAge(int age) {
    27. this.age = age;
    28. }
    29. public char getGender() {
    30. return gender;
    31. }
    32. public void setGender(char gender) {
    33. this.gender = gender;
    34. }
    35. //重写equals方法
    36. public boolean equals(Object o){
    37. //判断两个对象是否是同一个对象
    38. if (this == o){
    39. return true;
    40. }
    41. //判断对象类型是否为Person
    42. if (o instanceof Person){
    43. Person p = (Person)o;//对象向下转型
    44. return this.name == p.name && this.age == p.age && this.gender == p.gender;
    45. }
    46. return false;
    47. }
    48. }

  • 相关阅读:
    C++11之新的类功能
    蓝桥杯-星期一
    再论无为而治
    HTML的表单标签和无语义标签的讲解
    BP神经网络PID从Simulink仿真到PLC控制实现(含博途PLC完整SCL源代码)
    2023上海应用技术大学计算机考研信息汇总
    基于深度学习的高精度工人阶梯检测识别系统(PyTorch+Pyside6+YOLOv5模型)
    DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之十大知识领域之4辅助—项目人力资源管理
    “Sources, Summary” report——“来源,摘要”报告
    Linux高性能服务器编程 学习笔记 第十六章 服务器调制、调试和测试
  • 原文地址:https://blog.csdn.net/qq_46093575/article/details/126822454