Recipe Name:
Incorrect use of Objects.equals
Description:
Comparing a non-unboxable object and a primitive will always return false
Level:
warning
Language:
- java
Tags:
- Java basic
- quality
Documentation
Objects.equals
will always return false when comparing a primitive type to an object type that is not a wrapper type.
Object o = new Object(); // Not a wrapper type boolean sameNumber = Objects.equals(o, 1); boolean sameNumber = Objects.equals(1, o);After
Object o = new Object(); // Not a wrapper type boolean sameNumber = false; boolean sameNumber = false;
Recipe
id: scw:java:equality-object-primitive version: 10 metadata: name: Incorrect use of Objects.equals shortDescription: Comparing a non-unboxable object and a primitive will always return false level: warning language: java scwCategory: blog:generic cweCategory: 480 enabled: true descriptionFile: descriptions/Incorrect_use_of_Objects.equals.html tags: Java basic;quality search: methodcall: name: equals anyOf: - args: 1: type: not: reference: matches: java\.lang\.(Boolean|Byte|Character|Float|Integer|Long|Short|Double) checkInheritance: true checkInheritance: true isPrimitive: false 2: type: reference: not: '{{{ arguments.0.type }}}' checkInheritance: true isPrimitive: true - args: 1: type: reference: not: '{{{ arguments.1.type }}}' checkInheritance: true isPrimitive: true 2: type: not: reference: matches: java\.lang\.(Boolean|Byte|Character|Float|Integer|Long|Short|Double) checkInheritance: true checkInheritance: true isPrimitive: false type: Objects availableFixes: - name: Simplify to false actions: - rewrite: to: "false"