zoukankan      html  css  js  c++  java
  • equals和==

    什么是==

    对于基本数据类型:值是否相等
    对于引用变量:比较的是地址是否相同

    什么是equals(只针对对象)
    不能用于基本数据类型的比较
    比较的是所指向的地址
    源码:也就是说equals是特殊的==

    public boolean equals(Object obj){
        return (this == obj)
    }

    在Java中8种基本数据类型:
    浮点型:float(4 byte), double(8 byte)
    整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
    字符型: char(2 byte)
    布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值"true"和"false")

    注意:
    string类重写了equals方法,比较的是两个字符串是否相等,源码:

        public boolean equals(Object anObject) {
            //比较两个对象地址是否相同
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof 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;
                }
            }
            return false;
        }

    在实际运用中,如果apple的sweet属性为null 则
    apple.getSweet().equals("high")就会报空指针 因为空指针没有地址无法比较

    必须使用"high".equals().(apple.getSweet()) 这样可以避免空指针问题,因为把字符串前置可以重写equals方法比较的是字符串

    总结:

    所有比较是否相等时,都是用equals 并且在对常量相比较时,把常量写在前面,因为使用object的equals  object可能为null  则空指针

    在阿里的代码规范中只使用equals ,阿里插件默认会识别,并可以快速修改,推荐安装阿里插件来排查老代码使用“==”,替换成equals

    不破不立,怕啥怼啥!
  • 相关阅读:
    PL/SQL中关于时间的操作
    PL/SQL中关于时间的操作
    Master Data Service调用API创建Model
    ASP.NET Postback回调后参数无效
    Silverlight读取Web.config配置文件
    WCF的用户名+密码认证方式
    Trac 经验谈之(5)插件篇
    Cython 0.15,用 OpenMP 并行多核加速 Python!
    BizTalk Accelerator for HL7医疗行业消息路由处理机制
    Silverlight信息加密 通过Rfc2898DeriveBytes类使用基于HMACSHA1的伪随机数生成器实现PBKDF2
  • 原文地址:https://www.cnblogs.com/yslu/p/10248498.html
Copyright © 2011-2022 走看看