code: private static int memberValueHashCode(Object value) {
  		Class<?> type = value.getClass();
  		if (!type.isArray()) // primitive, string, class, enum const,
  								// or annotation
  			return value.hashCode();
  
  		if (type == byte[].class)
  			return Arrays.hashCode((byte[]) value);
  		if (type == char[].class)
  			return Arrays.hashCode((char[]) value);
  		if (type == double[].class)
  			return Arrays.hashCode((double[]) value);
  		if (type == float[].class)
  			return Arrays.hashCode((float[]) value);
  		if (type == int[].class)
  			return Arrays.hashCode((int[]) value);
  		if (type == long[].class)
  			return Arrays.hashCode((long[]) value);
  		if (type == short[].class)
  			return Arrays.hashCode((short[]) value);
  		if (type == boolean[].class)
  			return Arrays.hashCode((boolean[]) value);
  		return Arrays.hashCode((Object[]) value);
  	}
docs: Computes hashCode of a member value (in "dynamic proxy return form")