title: Why is "short thirty = 3 * 10" a legal assignment?
body: <p>If <code>short</code> is automatically promoted to <code>int</code> in arithmetic operations, then why is:</p>
  
  <pre><code>short thirty = 10 * 3;
  </code></pre>
  
  <p>A legal assignment to the <code>short</code> variable <code>thirty</code>?</p>
  
  <p>In turn, this:</p>
  
  <pre><code>short ten = 10;
  short three = 3;
  short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
  </code></pre>
  
  <p>as well as this:</p>
  
  <pre><code>int ten = 10;
  int three = 3;
  short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
  </code></pre>
  
  <p>does not compile because assigning an <code>int</code> value to a <code>short</code> is not allowed without casting as expected.</p>
  
  <p>Is there something special going on about numerical literals?</p>