static int hash(Object x1,Object x2,Object x3,Object x4){
  int h=0;
  h^=x1.hashCode();
  if (x2 != null) {
    h^=x2.hashCode();
  }
  if (x3 != null) {
    h^=x3.hashCode();
  }
  if (x4 != null) {
    h^=x4.hashCode();
  }
  h+=~(h << 9);
  h^=(h >>> 14);
  h+=(h << 4);
  h^=(h >>> 10);
  return h;
}

static int hash ( Object x1 , Object x2 , Object x3 , Object x4 ) { int h = 0 ; h ^= x1 . hashCode ( ) ; if ( x2 != null ) { h ^= x2 . hashCode ( ) ; } if ( x3 != null ) { h ^= x3 . hashCode ( ) ; } if ( x4 != null ) { h ^= x4 . hashCode ( ) ; } h += ~ ( h << 9 ) ; h ^= ( h > > > 14 ) ; h += ( h << 4 ) ; h ^= ( h > > > 10 ) ; return h ; }
returns a hash code for non - null objects . uses the same hash code spreader as most other java . util hash tables .
