# == Operator, equals(), hashCode
> equals and hashCode are defined in the Object class, which is the parent object of all Java objects
>
> -> Therefore, all Java objects inherit the equals and hashCode functions defined in the Object class
### == Operator
- When the operands are `primitive types` (int, byte, short, long, float, double, boolean, char), it `compares values`,
- When the operands are other `reference types`, it `compares the addresses they point to`
### equals()
```java
public boolean equals(Object obj) {
return (this == obj);
}
```
- Used to check whether 2 objects are identical
- It checks whether the 2 objects refer to the same thing
- That is, 2 objects are identical only when they point to the `same memory address`
- When we create 2 identical strings, the 2 strings are allocated in different memory locations
- However, the reason equals returns true is that the String class `overrides` the equals method to return true when the string contents are the same
- It compares each character one by one and returns true if they are all identical
- Therefore, even different objects are judged to be identical if they have the same string
### hashCode()
```java
public native int hashCode();
```
- It refers to a unique integer value that can identify an object
- In the Object class, it is set to return the `memory address of the object stored in heap memory`
- The `native` keyword means the method is implemented using native code called `JNI (Java Native Interface)`
- native is a keyword applicable only to methods, used when utilizing parts implemented in languages other than Java through JNI in Java
- It is a keyword that enables using other languages from Java!
- hashCode is `used to determine the location where data is stored` when using data structures such as `HashTable`