title: why can't cast Object[] to String[]
body: <ol>
  <li><p>No error      </p>
  
  <pre><code>Object[] a = new String[]{"12","34","56"};
  String[] b = (String[]) a;
  </code></pre></li>
  <li><p>No error      </p>
  
  <pre><code>Object a = new String[]{"12","34","56"};    
  String[] b = (String[]) a;
  </code></pre></li>
  <li><p>Run time error : ClassCastException</p>
  
  <pre><code>Object[] a = new Object[3];
  a[0] = "12";
  a[1] = "34";
  a[2] = "56";
  String[] b = (String[]) a;
  </code></pre></li>
  <li><p>Run time error : ClassCastException</p>
  
  <pre><code>Object[] a = {"12","34","56"};    
  String[] b = (String[]) a;
  </code></pre></li>
  </ol>
  
  <p>Of course, we can downcast  an <code>Object[]</code> variable back to <code>String[]</code> if it was created as an <code>String[]</code>.</p>
  
  <p>My question is why we can not cast <code>Object[]</code> to <code>String[]</code> when it was created as <code>Object[]</code> but all its members are String? Is it because of security reason or just not that useful to implement this?</p>