equals 为什么要把常量写在前面?

简介: equals 为什么要把常量写在前面?

使用str1.equals("abc");


如果str1是null,空是没有equals方法的,会抛出空指针异常


如果"abc".equals(str1);如果str1是null,最终始终返回的都是false;


也就是说 null在前会报空指针,null在后不会,会返回false


空指针就是空引用,java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。


null是所有引用类型的默认值,如果没有让一个引用指向一个实际存在的对象,它的默认值就是null。null本质上是一个值,这跟int的默认值是0,boolean的默认值是false一样。现在,我们通常都使用像eclipse等的集成开发环境进行开发,一般在定义变量的时候都会进行初始化(这也是写代码的一个良好的习惯),如果没有进行初始化,系统会进行提示。


所以null调任何方法都会报空指针,空字符串则不会,因为已经分配了内存地址


反过来想为什么把变量放在括号里就不会出现空指针异常呢?


equals()方法也可以比较一个变量是不是等于空,就是 "abc".equals(null); 括号里直接写null都可以了,还怕变量为null吗?


建议使用org.apache.commons.lang包下的StringUtils.equals(String str1, String str2)方法,这是官方给出的工具类


其中利用三元表达式规避了null的问题

public static boolean equals(String str1, String str2)
    {
        return str1 != null ? str1.equals(str2) : str2 == null;
    }
  //忽略大小写进行比较
    public static boolean equalsIgnoreCase(String str1, String str2)
    {
        return str1 != null ? str1.equalsIgnoreCase(str2) : str2 == null;
    }


相关文章
|
9月前
|
存储 算法 Java
为什么要重写 hashcode 和 equals 方法
为什么要重写 hashcode 和 equals 方法
68 0
|
3月前
|
存储 Java
两个对象的 hashCode()相同,则 equals()
当两个对象的 `hashCode()` 方法返回值相同时,这两个对象的 `equals()` 方法不一定返回 `true`。`hashCode()` 相同仅表示两对象可能相等,需进一步通过 `equals()` 方法验证对象是否真正相等。
46 7
|
3月前
|
Java
hashCode()和 equals()方法的默认实现
在Java中,`hashCode()` 和 `equals()` 方法的默认实现由 `Object` 类提供。`equals()` 默认比较对象引用是否相同,`hashCode()` 则返回对象的内存地址的整数表示。为了确保哈希表等数据结构的正确性,当重写 `equals()` 时,通常也需要重写 `hashCode()`。
73 8
|
4月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
231 1
|
7月前
|
Java 容器
equals与hashcode的区别与联系
equals与hashcode的区别与联系
|
9月前
equals方法中变量在前和在后的区别
equals方法中变量在前和在后的区别
168 0
|
9月前
|
存储 Java
为什么要重写hashCode()和equals()(深入了解)
为什么要重写hashCode()和equals()(深入了解)
|
存储 缓存 Java
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
278 0
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
|
算法 安全 Java
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
740 0
|
存储 NoSQL
简单讲一下 HashCode() 与 equals()方法
简单讲一下 HashCode() 与 equals()方法.
121 0