• 【Java】关于equals 和 ==


    一、== 和 equals 区别

    ==

    == 是运算符

    判读左右两端的数据是否一致, 比较基本数据类型比较的是值,比较引用数据类型比较的是地址值 ;

    默认判断的是两个对象的内存地址是否一致,一般用在基本数据类型上

    equals

    equals 是object类提供的一个方法,用来判断两个对象是否相等

    Object中的equals用的是== (地址值),重写之后的equals方法一般比较内容

    Object中的equals长这样: ​

    1. public boolean equals(Object obj) { ​
    2. return (this == obj); ​
    3. }

    字符串String也重写了equals方法,判断两个字符串的内容是否一致

    可以通过重写equals方法,不让它只是比较地址值/或者内容,比如也可以比较两个类的某一个属性,比如猫的花色,例子如下:

    1. public class Cats {
    2. String name;
    3. String color;
    4. public Cats(String name, String color) {
    5. this.name = name;
    6. this.color = color;
    7. }
    8. public boolean equals(Cats c){
    9. if(this.color == c.color){//单纯的自己去写判断的逻辑
    10. return true;
    11. }else
    12. return false;
    13. }
    14. public static void main(String[] args) {
    15. Cats c1 = new Cats("小花","红色");
    16. Cats c2 = new Cats("小花","红色");
    17. // System.out.println(c1 == c2);//false 默认判断的是两个对象的内存地址是否一致,一般用在基本数据类型上
    18. // System.out.println(c1.equals(c2));//false 默认调用的是object提供的equals方法
    19. //object中的equals长这样:
    20. //public boolean equals(Object obj) {
    21. // return (this == obj);
    22. // }
    23. System.out.println(c1.equals(c2));//得到的是true,此时调用的是子类中的equals方法
    24. }
    25. }

    举例:

    1. public class Test {
    2. public static void main(String[] args) {
    3. String a1 = "竹鼠";
    4. String a2 = "竹鼠";//第二次的竹鼠,并没有单独占用内存空间
    5. System.out.println(a1 == a2); // true
    6. System.out.println(a1.equals(a2)); // true
    7. String a3 = new String("钢精");//这一句话创建了两个对象,一个是字符串对象“钢精”,一个是new的对象
    8. String a4 = new String("钢精");
    9. System.out.println(a3 == a4); // false
    10. System.out.println(a3.equals(a4)); // true
    11. }
    12. }

    因为字符串是我们使用频率最高的一种数据类型. java会自动帮我们对字符串进行缓存. 发现一样的字符串了就不再创建新的了. 所以a1和a2内存地址是一样的. 所以两个都是true.

    a3在创建的时候new了一次. a4也new了一次. 此时, “钢精” 三个字被缓存. 但是. new的时候是要创建对象的. 对象再引入”钢精”三个字. 所以. 两个对象的地址是不一样的. 但是内容是一样的.

    综上, 我们在判断两个字符串是否一致的时候, 一定要用equals 这样就是很稳定的判断内容是否一样.

    二、关于equals顺序

    如果用type.equals(Chrome) 可能会空指针错误

    因为type是string 引用数据类型,就有可能会传null进来

    所以如果是null.equals(Chrome)会报空指针;

    反之,如果是"chrome".equals(null)这样是不会报空指针的

  • 相关阅读:
    京东平台API接口
    RestTemplate今天过去将来
    如何在没有苹果电脑将 IPA 文件上传到苹果开发者中心
    四种常用的排序算法
    Mysql高级——数据库设计规范(1)
    【自动化营销】跨境电商高效进行WhatsApp营销技巧!
    Golang基础教程
    JAVA毕业设计高校请假管理系统计算机源码+lw文档+系统+调试部署+数据库
    【51单片机】LED与独立按键(学习笔记)
    实习面试记录
  • 原文地址:https://blog.csdn.net/weixin_40772077/article/details/136688109