title: Why is HashEntry in ConcurrentHashMap final?
body: <p>I am going through source code of <code>ConcurrentHashMap</code> in jdk 7 and have few questions.  I  have already gone through all the questions on CHM on StackOverFlow, but could not find the answer.</p>
  
  <ol>
  <li><p>Is <code>get()</code> operation in CHM guaranteed to get correct value of <code>put()</code> by
  other thread? I am asking this as get is not <code>synchronized</code> unless it
  sees the null value. How  null value ensures that same record is being
  updated by other thread and then get is used with lock?</p></li>
  <li><p>This is related to <code>HashEntry</code> static class where key and values are stored.</p>
  
  <p>a.  Why is this class final?  Is it just to make sure nobody subclasses it?
  What happens if somebody subclasses it -- is something wrong with that?</p>
  
  <p>b. How does making the next field final helps in getting thread safety?</p>
  
  <p>c. Why is Key also final? (I am not sure why Key is final in <code>HashMap</code> also)</p></li>
  </ol>