title: Are primitive types different in Java and C#?
body: <p>I am manually converting code from Java to C# and struggling with (what I call) primitive types (see, e.g. <a href="https://stackoverflow.com/questions/1597154/do-autoboxing-and-unboxing-behave-differently-in-java-and-c">Do autoboxing and unboxing behave differently in Java and C#</a>). From the answers I understand that <code>double</code> (C#) and <code>Double</code> (C#)  are equivalent and <code>double</code> (C#) can also be used in containers, e.g. as a key in a Dictionary. However, <code>double</code> (Java) cannot be used in containers like HashMap which is why it is auto-boxed to <code>Double</code> (Java). </p>
  
  <ol>
  <li>Is <code>double</code> (C#) a primitive or an object? </li>
  <li>If it's a primitive what makes it behave differently from <code>double</code> (Java)?</li>
  </ol>
  
  <p><code>double</code> (C#) cannot be set to null unless it is made <code>nullable</code>. </p>
  
  <ol start="3">
  <li>Is <code>double?</code> (C#) equivalent  to <code>Double</code> (Java)? Are they both referred to as objects? </li>
  </ol>
  
  <p>(Is the use of the term "first-class object" useful in this discussion?)</p>