• 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. }

  • 相关阅读:
    Java基础篇 数组
    艾美捷C1q天然蛋白化学性质和相关研究方案
    CocoaPods podfile 文件配置
    Open vSwitch with DPDK
    安卓APP源码和设计报告——好再来点餐
    【云原生】Docker容器服务更新与发现之consul
    [swift刷题模板] 树状数组(BIT/FenwickTree)
    rhcsa-压缩和解压缩
    oCPC实践录 | oCPC转化的设计、选择、归因与成本设置(3)
    图论常见算法总结——prim,kruskal,dijkstra,floyed,bellman-ford,spfa
  • 原文地址:https://blog.csdn.net/qq_46093575/article/details/126822454