From 9294cbc2cd91dfaa01235e62833277cd24cdd1e1 Mon Sep 17 00:00:00 2001
From: "Dr. Martin Goik" <goik@hdm-stuttgart.de>
Date: Fri, 12 Jul 2019 21:33:45 +0200
Subject: [PATCH] int to Double auto boxing exercise

---
 Doc/Sd1/workingWithNumbers.xml | 163 ++++++++++++++++++++-------------
 1 file changed, 100 insertions(+), 63 deletions(-)

diff --git a/Doc/Sd1/workingWithNumbers.xml b/Doc/Sd1/workingWithNumbers.xml
index d19fb504c..212a13934 100644
--- a/Doc/Sd1/workingWithNumbers.xml
+++ b/Doc/Sd1/workingWithNumbers.xml
@@ -139,69 +139,69 @@ int iPrimitiveFromInteger = <co linkends="sd1_numbers_fig_conventional-3"
         </tr>
       </informaltable>
 
-    <informaltable role="slideExclude" border="1">
-      <colgroup width="50%"/>
-
-      <colgroup width="50%"/>
-
-      <tr>
-        <th>Boxing and unboxing</th>
-
-        <th><quote>Conventional</quote> <xref linkend="glo_Java"/></th>
-      </tr>
-
-      <tr>
-        <td valign="top"><calloutlist>
-            <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-1-co"
-                     xml:id="sd1_numbers_fig_boxingAndUnboxing-1">
-              <para>Defining a primitive <code language="java">int</code>
-              value.</para>
-            </callout>
-
-            <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-2-co"
-                     xml:id="sd1_numbers_fig_boxingAndUnboxing-2">
-              <para>Creating an instance of <classname
-              xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>
-              by means of boxing.</para>
-            </callout>
-
-            <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-3-co"
-                     xml:id="sd1_numbers_fig_boxingAndUnboxing-3">
-              <para>Assigning an <classname
-              xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>'s
-              value to a primitive <code language="java">int</code> by means
-              of unboxing.</para>
-            </callout>
-          </calloutlist></td>
-
-        <td valign="top"><calloutlist>
-            <callout arearefs="sd1_numbers_fig_conventional-1-co"
-                     xml:id="sd1_numbers_fig_conventional-1">
-              <para>Defining a primitive <code language="java">int</code>
-              value.</para>
-            </callout>
-
-            <callout arearefs="sd1_numbers_fig_conventional-2-co"
-                     xml:id="sd1_numbers_fig_conventional-2">
-              <para>Creating a new instance of <classname
-              xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>
-              using the class method <methodname
-              xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#valueOf-int-">Integer
-              valueOf​(int i)</methodname>.</para>
-            </callout>
-
-            <callout arearefs="sd1_numbers_fig_conventional-3-co"
-                     xml:id="sd1_numbers_fig_conventional-3">
-              <para>Assigning an <classname
-              xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>'s
-              value to a primitive <code language="java">int</code> using the
-              <methodname
-              xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#intValue--">int
-              intValue()</methodname> instance method.</para>
-            </callout>
-          </calloutlist></td>
-      </tr>
-    </informaltable>
+      <informaltable border="1" role="slideExclude">
+        <colgroup width="50%"/>
+
+        <colgroup width="50%"/>
+
+        <tr>
+          <th>Boxing and unboxing</th>
+
+          <th><quote>Conventional</quote> <xref linkend="glo_Java"/></th>
+        </tr>
+
+        <tr>
+          <td valign="top"><calloutlist>
+              <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-1-co"
+                       xml:id="sd1_numbers_fig_boxingAndUnboxing-1">
+                <para>Defining a primitive <code language="java">int</code>
+                value.</para>
+              </callout>
+
+              <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-2-co"
+                       xml:id="sd1_numbers_fig_boxingAndUnboxing-2">
+                <para>Creating an instance of <classname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>
+                by means of boxing.</para>
+              </callout>
+
+              <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-3-co"
+                       xml:id="sd1_numbers_fig_boxingAndUnboxing-3">
+                <para>Assigning an <classname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>'s
+                value to a primitive <code language="java">int</code> by means
+                of unboxing.</para>
+              </callout>
+            </calloutlist></td>
+
+          <td valign="top"><calloutlist>
+              <callout arearefs="sd1_numbers_fig_conventional-1-co"
+                       xml:id="sd1_numbers_fig_conventional-1">
+                <para>Defining a primitive <code language="java">int</code>
+                value.</para>
+              </callout>
+
+              <callout arearefs="sd1_numbers_fig_conventional-2-co"
+                       xml:id="sd1_numbers_fig_conventional-2">
+                <para>Creating a new instance of <classname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>
+                using the class method <methodname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#valueOf-int-">Integer
+                valueOf​(int i)</methodname>.</para>
+              </callout>
+
+              <callout arearefs="sd1_numbers_fig_conventional-3-co"
+                       xml:id="sd1_numbers_fig_conventional-3">
+                <para>Assigning an <classname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>'s
+                value to a primitive <code language="java">int</code> using
+                the <methodname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#intValue--">int
+                intValue()</methodname> instance method.</para>
+              </callout>
+            </calloutlist></td>
+        </tr>
+      </informaltable>
     </figure>
 
     <figure xml:id="sd1_numbers_fig_stackBoxUnboxVsConventional">
@@ -238,6 +238,43 @@ while (!values.empty()) {
         </tr>
       </informaltable>
     </figure>
+
+    <qandaset defaultlabel="qanda"
+              xml:id="sd1_numbers_qanda_boxing_int2Double">
+      <title>Auto boxing int to Double?</title>
+
+      <qandadiv>
+        <qandaentry>
+          <question>
+            <para>Consider the following boxing conversion:</para>
+
+            <programlisting language="java">double d = 3.0;
+Double dInstance = d;</programlisting>
+
+            <para>This code compiles and executes perfectly well. On contrary
+            the following snippet does not:</para>
+
+            <programlisting language="java">int i = 3;
+Double dInstance = i;</programlisting>
+
+            <para>Explain this result. Hint: You may want to read <link
+            xlink:href="https://docs.oracle.com/javase/specs/jls/se12/html/jls-5.html">chapter
+            5</link> and <link
+            xlink:href="https://docs.oracle.com/javase/specs/jls/se12/html/jls-5.html#jls-5.2">section
+            5.2</link> in particular from the <link
+            xlink:href="https://docs.oracle.com/javase/specs/jls/se12/html/">The
+            Java® Language Specification</link>.</para>
+          </question>
+
+          <answer>
+            <para>The compiler will not perform auto boxing from
+            <code>int</code> do <code>Double</code>. On the other hand Double
+            is no subtype of Integer disallowing a widening reference
+            conversion.</para>
+          </answer>
+        </qandaentry>
+      </qandadiv>
+    </qandaset>
   </section>
 
   <section xml:id="sd1_numbers_sect_numberParsing">
-- 
GitLab