equals方法被调用时字符串和对象的顺序

之前改的bug,一开始我先判断sortKey不为空,然后再去判断sortKey的值,见下图,

代码push后,同事审核后,叫我将sortKey和值得顺序调换一下,说这样就不用再判断为空。这是改之后的代码,见下图,

问了几个人,说是避免空指针异常,我说我前面已经对sortKey做了一个不为空判定,有人回答说虽然没有错,但是多判断了一次,而且从代码规范上看显得多余。

问题来了,equals方法被调用时,谁在前谁在后,这里面有什么讲究?经过查阅相关资料,整理了一些知识点。

equals方法在Object抽象类中比较的是两个对象的引用地址是否相同,然而在String类型中,equals方法被重写了。因此String类型中的equals方法是比较当前字符串与传进来的字符串是否相同。

如果将对象放在前面,调用equals方法时,若对象为空,会报空指针异常;

但若是将字符串放在前面,也就是相当于判断这个字符串的值,即使它为空,也不会报错。因此可以总结为:报不报错主要看调用equals的对象是否为空。

所以在使用equals方法时,通常将字符串放在前面,比如"userName" .equals (对象),这样就不用担心对象为空了。先前写的虽然对sortKey对象做了不为空的判定,一方面多判断了一次,影响性能,另一反面也浪费了equals方法的使用。所以调换顺序更为规范。

原文地址:https://www.cnblogs.com/luckyliulin/p/9480727.html

时间: 2024-08-25 04:08:27

equals方法被调用时字符串和对象的顺序的相关文章

string 构造方法为对象赋值,equals方法比较两个字符串是否相等

package String; /* * 写了一个简单的equals 方法 * 总结:用string的构造方法来赋值,构造方法:public string (string xxx) * 比较两个字符串是否相等,用方法 public boolean equals(string str) */ public class StringDemo { public static void main(String[] args) { String www = "hello"; //直接为www 初

相同类中方法间调用时日志Aop失效处理

本篇分享的内容是在相同类中方法间调用时Aop失效处理方案,该问题我看有很多文章描述了,不过大多是从事务角度分享的,本篇打算从日志aop方面分享(当然都是aop,失效和处理方案都是一样),以下都是基于springboot演示: 快速定义个日志Appender 快速定义个拦截器和日志注解(aop) 模拟相同类中方法间调用时aop失效 Aop失效处理方案(就两种足够了) 快速定义个日志Appender 日志我还是喜欢log4j,大部分朋友也同样吧,这里lombok与log4j结合来完成我们的日志,如下

页面传值的方法 和JSON与字符串和对象之间的转换

半夜思考, 为什么建议重写 equals()方法时, 也要重写hashCode()方法

我说的半夜, 并不是真正的半夜, 指的是在我一个人的时候, 我会去思考一些奇怪的问题. 这次思考的如题所示, 为什么重写 equals() 方法时, 强烈建议重写 hashCode() 方法, 这个答案, 应该大多数人都知道, 是为了减少 equals() 方法的调用, 只有当两个对象的 hashCode 相等时, 才会去调用 equals()方法去判断两个对象是否相等, 减少了equals()的调用, 提高了效率 . 话是这么说,  的确, 可以减少很多次的 equals()方法的调用, 但是

Effective Java 第三版——10. 重写equals方法时遵守通用约定

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr

Object对象 equals()方法

equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较. Object类中的equals方法内部使用的就是==比较运算符 1 public class Person { 2 private String name; 3 private int age; 4 Person(){ 5 6 } 7 Person(String name,int age){ 8 this.name=name; 9 this.age=age; 10 } 11 12 public boolean

如何使用==操作符,Equals方法,ReferenceEquals方法,IEquatable接口比较2个对象

"世界上不会有两片完全相同的树叶",这句话适用于现实世界.而在软件世界中,这句话变成了"世界上必须有两片完全相同的树叶",否则,很多事情无以为继. 当比较2个对象是否相等时,通常情况下:==操作符用来比较值类型,比较的是值:实例方法Equals比较引用类型,比较的是对象的地址.静态方法Object.ReferenceEquals既可以比较引用类型也可以比较值类型,但比较的是对象的地址. 在实际项目中,当比较2个引用类型对象时,我们的需求变为:通过依次比较2个对象的所

JAVA学习(二) String使用equals方法和==分别比较的是什么?(转)

String使用的equals方法和==的区别 equals方法和==的区别 首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用.这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = "Hello",它的使用方法如同基本类型int一样,比如int i = 1;,而作为一个对象来使用,则是指通过new关键字来创建一个新对象,比如String s = new String("Hello").但是它的内部动作其实还是创建

java -&gt; equals方法与toString方法

equals方法 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符(比较内存地址). 在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较.如下代码演示: /* 描述人这个类,并定义功能根据年龄判断是否是同龄人 由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法 在方法体中根据类的属性值进行比