title: Why should I override hashCode() when I override equals() method?
body: <p>Ok, I have heard from many places and sources that whenever I override the equals() method, I need to override the hashCode() method as well. But consider the following piece of code</p>
  
  <pre><code>package test;
  
  public class MyCustomObject {
  
      int intVal1;
      int intVal2;
  
      public MyCustomObject(int val1, int val2){
          intVal1 = val1;
          intVal2 = val2;
      }
  
      public boolean equals(Object obj){
          return (((MyCustomObject)obj).intVal1 == this.intVal1) &amp;&amp; 
                  (((MyCustomObject)obj).intVal2 == this.intVal2);
      }
  
      public static void main(String a[]){
          MyCustomObject m1 = new MyCustomObject(3,5);
          MyCustomObject m2 = new MyCustomObject(3,5);
          MyCustomObject m3 = new MyCustomObject(4,5);
  
          System.out.println(m1.equals(m2));
          System.out.println(m1.equals(m3));
      }
  }
  </code></pre>
  
  <p>Here the output is true, false exactly the way I want it to be and I dont care of overriding the hashCode() method at all. This means that hashCode() overriding is an option rather being a mandatory one as everyone says.</p>
  
  <p>I want a second confirmation.</p>