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

    不破不立,怕啥怼啥!
  • 相关阅读:
    搭建strom 的开发环境
    maven 的plugin 的使用
    Maven 的dependency 的 classifier的作用
    Maven中的dependency的scope作用域详解
    Supervisor-进程监控自动重启
    websocket 实战
    vue 监听路由变化
    vux-uploader 图片上传组件
    vue 定义全局函数
    判断对象属性的值是否空,如为空,删除该属性
  • 原文地址:https://www.cnblogs.com/yslu/p/10248498.html
Copyright © 2011-2022 走看看