BAEL 5414 - Java null check why use == instead of .equals() (#12124)

This commit is contained in:
Mateusz Szablak 2022-05-05 05:20:19 +02:00 committed by GitHub
parent b03e1b3216
commit 7e5463390b
4 changed files with 158 additions and 0 deletions

View File

@ -0,0 +1,5 @@
## Core Java Lang (Part 5)
This module contains articles about core features in the Java language
## TODO ##

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>core-java-lang-5</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>core-java-lang-5</name>
<packaging>jar</packaging>
<parent>
<groupId>com.baeldung.core-java-modules</groupId>
<artifactId>core-java-modules</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<build>
<finalName>core-java-lang-5</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>

View File

@ -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);
}
}
}

View File

@ -73,6 +73,7 @@
<module>core-java-lang-2</module>
<module>core-java-lang-3</module>
<module>core-java-lang-4</module>
<module>core-java-lang-5</module>
<module>core-java-lang-math</module>
<module>core-java-lang-math-2</module>
<module>core-java-lang-math-3</module>