Skip to content

Instantly share code, notes, and snippets.

@glektarssza
Last active January 26, 2026 09:10
Show Gist options
  • Select an option

  • Save glektarssza/821738e96ee5b7677cbba189c1293539 to your computer and use it in GitHub Desktop.

Select an option

Save glektarssza/821738e96ee5b7677cbba189c1293539 to your computer and use it in GitHub Desktop.

Revisions

  1. glektarssza revised this gist Jan 26, 2026. 1 changed file with 34 additions and 0 deletions.
    34 changes: 34 additions & 0 deletions HashCodeImpl.java
    Original file line number Diff line number Diff line change
    @@ -42,4 +42,38 @@ public int hashCode() {
    (nullableReferenceField == null ? 0 : nullableReferenceField.hashCode());
    return result;
    }

    @Override
    public boolean equals(Object o) {
    // Optimization (not required).
    if (this == o) {
    return true;
    }

    // Return false if the other object has the wrong type, interface, or is null.
    if (!(o instanceof HashCodeImpl)) {
    return false;
    }

    HashCodeImpl lhs = (HashCodeImpl) o; // lhs means "left hand side"

    // Primitive fields
    return booleanField == lhs.booleanField
    && byteField == lhs.byteField
    && charField == lhs.charField
    && shortField == lhs.shortField
    && intField == lhs.intField
    && longField == lhs.longField
    && floatField == lhs.floatField
    && doubleField == lhs.doubleField

    // Arrays
    && Arrays.equals(arrayField, lhs.arrayField)

    // Objects
    && referenceField.equals(lhs.referenceField)
    && (nullableReferenceField == null
    ? lhs.nullableReferenceField == null
    : nullableReferenceField.equals(lhs.nullableReferenceField));
    }
    }
  2. glektarssza revised this gist Jan 26, 2026. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions HashCodeImpl.java
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,5 @@
    // Source - https://stackoverflow.com/a/31220250
    // Posted by Christopher Rucinski, modified by community. See post 'Timeline'
    // for change history
    // Posted by Christopher Rucinski, modified by community. See post 'Timeline' for change history
    // Retrieved 2026-01-26, License - CC BY-SA 3.0
    import java.util.Arrays;

  3. glektarssza created this gist Jan 26, 2026.
    46 changes: 46 additions & 0 deletions HashCodeImpl.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@
    // Source - https://stackoverflow.com/a/31220250
    // Posted by Christopher Rucinski, modified by community. See post 'Timeline'
    // for change history
    // Retrieved 2026-01-26, License - CC BY-SA 3.0
    import java.util.Arrays;

    import javax.annotation.Nullable;

    public class HashCodeImpl {
    public boolean booleanField;
    public byte byteField;
    public char charField;
    public short shortField;
    public int intField;
    public long longField;
    public float floatField;
    public double doubleField;
    public Object[] arrayField;
    public Object referenceField;
    @Nullable
    public Object nullableReferenceField;

    @Override
    public int hashCode() {
    // Start with a non-zero constant. Prime is preferred
    int result = 17;

    // Primatives
    result = 31 * result + (booleanField ? 1 : 0); // 1 bit » 32-bit
    result = 31 * result + byteField; // 8 bits » 32-bit
    result = 31 * result + charField; // 16 bits » 32-bit
    result = 31 * result + shortField; // 16 bits » 32-bit
    result = 31 * result + intField; // 32 bits » 32-bit
    result = 31 * result + (int)(longField ^ (longField >>> 32)); // 64 bits » 32-bit
    result = 31 * result + Float.floatToIntBits(floatField); // 32 bits » 32-bit
    long doubleFieldBits = Double.doubleToLongBits(doubleField); // 64 bits (double) » 64-bit (long) » 32-bit (int)
    result = 31 * result + (int)(doubleFieldBits ^ (doubleFieldBits >>> 32));

    // Objects
    result = 31 * result + Arrays.hashCode(arrayField); // var bits » 32-bit
    result = 31 * result + referenceField.hashCode(); // var bits » 32-bit (non-nullable)
    result = 31 * result + // var bits » 32-bit (nullable)
    (nullableReferenceField == null ? 0 : nullableReferenceField.hashCode());
    return result;
    }
    }