From 7e5463390b4cb14ebf591df60061a8c56a6868fd Mon Sep 17 00:00:00 2001 From: Mateusz Szablak Date: Thu, 5 May 2022 05:20:19 +0200 Subject: [PATCH] BAEL 5414 - Java null check why use == instead of .equals() (#12124) --- core-java-modules/core-java-lang-5/README.md | 5 + core-java-modules/core-java-lang-5/pom.xml | 27 ++++ .../nullchecks/NullChecksUnitTest.java | 125 ++++++++++++++++++ core-java-modules/pom.xml | 1 + 4 files changed, 158 insertions(+) create mode 100644 core-java-modules/core-java-lang-5/README.md create mode 100644 core-java-modules/core-java-lang-5/pom.xml create mode 100644 core-java-modules/core-java-lang-5/src/test/java/com/baeldung/nullchecks/NullChecksUnitTest.java diff --git a/core-java-modules/core-java-lang-5/README.md b/core-java-modules/core-java-lang-5/README.md new file mode 100644 index 0000000000..012f4edc51 --- /dev/null +++ b/core-java-modules/core-java-lang-5/README.md @@ -0,0 +1,5 @@ +## Core Java Lang (Part 5) + +This module contains articles about core features in the Java language + +## TODO ## diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml new file mode 100644 index 0000000000..6d3771bd31 --- /dev/null +++ b/core-java-modules/core-java-lang-5/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + core-java-lang-5 + 0.1.0-SNAPSHOT + core-java-lang-5 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + core-java-lang-5 + + + src/main/resources + true + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/nullchecks/NullChecksUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/nullchecks/NullChecksUnitTest.java new file mode 100644 index 0000000000..12b3db734d --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/nullchecks/NullChecksUnitTest.java @@ -0,0 +1,125 @@ +package com.baeldung.nullchecks; + +import org.junit.Test; + +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.*; + +public class NullChecksUnitTest { + + @Test + public void whenReferenceEqualityOnPrimitives_thenCompareValues() { + int a = 10; + int b = 15; + int c = 10; + int d = a; + + // different values check + assertFalse(a == b); + + // same values check + assertTrue(a == c); + + // same references check + assertTrue(a == d); + } + + @Test + public void whenReferenceEqualityOnObjects_thenCompareReferences() { + Person a = new Person("Bob", 20); + Person b = new Person("Mike", 40); + Person c = new Person("Bob", 20); + Person d = a; + Person e = null; + + // different values check + assertFalse(a == b); + + // same values check + assertFalse(a == c); + + // same references check + assertTrue(a == d); + + // same references check - for nulls + assertTrue(e == null); + } + + @Test + public void whenValueEqualityOnPrimitives_thenCompareValues() { + int a = 10; + Integer b = a; + + assertTrue(b.equals(10)); + } + + @Test + public void whenValueEqualityOnObjects_thenCompareValues() { + Person a = new Person("Bob", 20); + Person b = new Person("Mike", 40); + Person c = new Person("Bob", 20); + Person d = a; + Person e = null; + + // different values check + assertFalse(a.equals(b)); + + // same values check + assertTrue(a.equals(c)); + + // same references check + assertTrue(a.equals(d)); + + // null checks + assertFalse(a.equals(e)); + assertThrows(NullPointerException.class, () -> e.equals(a)); + + // null checks fixed + assertFalse(e != null && e.equals(a)); + + // using Objects.equals + assertFalse(Objects.equals(e, a)); + assertTrue(Objects.equals(null, e)); + + } + + private class Person { + private String name; + private int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Person person = (Person) o; + return age == person.age && Objects.equals(name, person.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, age); + } + } +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 257616de8d..04b46e3740 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -73,6 +73,7 @@ core-java-lang-2 core-java-lang-3 core-java-lang-4 + core-java-lang-5 core-java-lang-math core-java-lang-math-2 core-java-lang-math-3