### Question:
UserGroupInformation { @Override public boolean equals(Object o) { if (o == this) { return true; } else if (o == null || getClass() != o.getClass()) { return false; } else { return subject == ((UserGroupInformation) o).subject; } } UserGroupInformation(Subject subject); @InterfaceAudience.Public @InterfaceStability.Evolving static void setConfiguration(Configuration conf); static boolean isSecurityEnabled(); boolean hasKerberosCredentials(); @InterfaceAudience.Public @InterfaceStability.Evolving synchronized static UserGroupInformation getCurrentUser(); static UserGroupInformation getBestUGI(
      String ticketCachePath, String user); @InterfaceAudience.Public @InterfaceStability.Evolving static UserGroupInformation getUGIFromTicketCache(
            String ticketCache, String user); @InterfaceAudience.Public @InterfaceStability.Evolving synchronized static UserGroupInformation getLoginUser(); boolean isFromKeytab(); @InterfaceAudience.Public @InterfaceStability.Evolving synchronized static void loginUserFromKeytab(String user,
                                  String path
                                  ); synchronized void checkTGTAndReloginFromKeytab(); @InterfaceAudience.Public @InterfaceStability.Evolving synchronized void reloginFromKeytab(); @InterfaceAudience.Public @InterfaceStability.Evolving synchronized void reloginFromTicketCache(); synchronized static UserGroupInformation loginUserFromKeytabAndReturnUGI(String user,
                                  String path
                                  ); @InterfaceAudience.Public @InterfaceStability.Evolving synchronized static boolean isLoginKeytabBased(); @InterfaceAudience.Public @InterfaceStability.Evolving static UserGroupInformation createRemoteUser(String user); @InterfaceAudience.Public @InterfaceStability.Evolving static UserGroupInformation createProxyUser(String user,
      UserGroupInformation realUser); @InterfaceAudience.Public @InterfaceStability.Evolving UserGroupInformation getRealUser(); @InterfaceAudience.Public @InterfaceStability.Evolving static UserGroupInformation createUserForTesting(String user, 
                                                          String[] userGroups); static UserGroupInformation createProxyUserForTesting(String user,
      UserGroupInformation realUser, String[] userGroups); String getShortUserName(); @InterfaceAudience.Public @InterfaceStability.Evolving String getUserName(); synchronized boolean addTokenIdentifier(TokenIdentifier tokenId); synchronized Set<TokenIdentifier> getTokenIdentifiers(); synchronized boolean addToken(Token<? extends TokenIdentifier> token); synchronized boolean addToken(Text alias,
                                       Token<? extends TokenIdentifier> token); synchronized Collection<Token<? extends TokenIdentifier>> getTokens(); synchronized Credentials getCredentials(); synchronized void addCredentials(Credentials credentials); synchronized String[] getGroupNames(); @Override String toString(); synchronized void setAuthenticationMethod(AuthenticationMethod authMethod); synchronized AuthenticationMethod getAuthenticationMethod(); static AuthenticationMethod getRealAuthenticationMethod(
      UserGroupInformation ugi); @Override boolean equals(Object o); @Override int hashCode(); @InterfaceAudience.Public @InterfaceStability.Evolving T doAs(PrivilegedAction<T> action); @InterfaceAudience.Public @InterfaceStability.Evolving T doAs(PrivilegedExceptionAction<T> action
                    ); static void main(String [] args); static final String HADOOP_TOKEN_FILE_LOCATION; }### Answer:
@Test public void testEquals() throws Exception { UserGroupInformation uugi = UserGroupInformation.createUserForTesting(USER_NAME, GROUP_NAMES); assertEquals(uugi, uugi); UserGroupInformation ugi2 = UserGroupInformation.createUserForTesting(USER_NAME, GROUP_NAMES); assertFalse(uugi.equals(ugi2)); assertFalse(uugi.hashCode() == ugi2.hashCode()); UserGroupInformation ugi3 = new UserGroupInformation(uugi.getSubject()); assertEquals(uugi, ugi3); assertEquals(uugi.hashCode(), ugi3.hashCode()); }