@Override public int hashCode(){
  int h=hash;
  if (h == 0) {
    final int n=arity();
    for (int i=0; i < n; i++) {
      final BOp arg=get(i);
      h=31 * h + (arg == null ? 0 : arg.hashCode());
    }
    hash=h;
  }
  return h;
}

@ Override public int hashCode ( ) { int h = hash ; if ( h == 0 ) { final int n = arity ( ) ; for ( int i = 0 ; i < n ; i ++ ) { final BOp arg = get ( i ) ; h = 31 * h + ( arg == null ? 0 : arg . hashCode ( ) ) ; } hash = h ; } return h ; }
the hash code is based on the hash of the operands ( cached ) .
