title: Why does this HashMap.get return a null?
body: <p>I'm trying to create a <code>Hashmap</code> to perform a lookup for me.  However when I run this test code, the output is null.  I think it has to due with the nature of how the keys are being stored, but Im not positive.  Maybe it's a similar quirk like how the <code>var1 == var2</code> are not equals unless they point to the same Object in memory, instead you have to use the <code>var1.equals(var2)</code>?</p>
  
  <p>There are two classes to test this.</p>
  
  <p><strong>TestCard.java</strong>  </p>
  
  <pre><code>import java.util.HashMap;
  
  public class TestCard {
  
       // HashMap for SpecialK Lookup
      private static HashMap&lt;Card, Integer&gt; specialKLookup = new HashMap&lt;Card, Integer&gt;();
  
      // Constructor
      public TestCard(){
      }
  
      public static void main(String[] args) {
          Card[] cards = new Card[3];
          cards[0] = new Card((short)12, (short)0);
          cards[1] = new Card((short)0, (short)1);
          cards[2] = new Card((short)5, (short)2);
  
          /* Build SpecialK Lookup HashMap.
           * Ace of Spades = 0
           * Ace of Hearts = 1
           * Ace of Diamonds = 2
           * Ace of Clubs = 3
           * ...
           * Two of Clubs = 51
           */
          Integer specialKCounter = 0;
          for(int i=12;i&gt;=0;i--){
                  for (int j=0;j&lt;4;j++){
                          specialKLookup.put(new Card((short)i, (short)j), specialKCounter++);
                  }
          }
  
          System.out.println(specialKLookup.get(cards[0]));
      }
  }
  </code></pre>
  
  <p><strong>Card.java</strong>  </p>
  
  <pre><code>public class Card{
      private short rank, suit;
  
      private static String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};
      private static String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
  
      //Constructor
      public Card(short rank, short suit){
          this.rank = rank;
          this.suit = suit;
      }
  
      // Getter and Setters
      public short getSuit(){
          return suit;
      }
  
      public short getRank(){
          return rank;
      }
  
      protected void setSuit(short suit){
          this.suit = suit;
      }
  
      protected void setRank(short rank){
          this.rank = rank;
      }   
  }
  </code></pre>