% vim: set ts=2 sw=2 et tw=80:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[margin=2cm]{geometry}

\title{Howework 1 -- Advanced Java Programming}

\author{Claudio Maggioni}

\begin{document}
\maketitle

\section{Exercise A}

\begin{itemize}
  \item
    1: True
  \item
    2: False (Required only if the class implements Comparable)
  \item
    3: True
  \item
    4: False (== for objects checks for reference equality)
  \item
    5: False (it is indeed implemented by default - more precisely implemented
    in Object - but the default implementation checks reference equality only)
  \item
    6: False (a child class of \texttt{Tiger} may include additional fields that
    are mutable. However, all properties and behaviour accessible via a
    reference of type \texttt{Tiger} type can be considered immutable)
  \item
    7: False (the class itself is not public)
  \item
    8: False (classes in the same package of \texttt{Tiger} can read the
    \texttt{name} field)
  \item
    9: True (the constructor to implement must explicitly call \texttt{Tiger}'s
    constructor with \texttt{super})
  \item
    10: False (the declared type is \texttt{Number}, the runtime type is
    \texttt{Integer})
\end{itemize}

\section{Exercise B}

\begin{itemize}
  \item
    1: False (the only ``collection'' data structure based over an unboxed
    primitive type is the array -- however arrays are not \texttt{java.util}
    collections)
  \item
    2: True (if the \texttt{hashCode()} return value changes after the mutation
    then the implementation of hashMap is unable to recognize it was inserted
    previously)
  \item
    3: True
  \item
    4: True
  \item
    5: False (\texttt{finally} blocks are always evaluated)
\end{itemize}

\section{Exercise C}

\begin{itemize}
  \item 1: True
  \item 2: False
  \item 3: True
  \item 4: True (more precisely, double dispatch or 'virtual table' invocations
    are used only for invoking the method in the class matching the object's
    dynamic type)
  \item 5: True (as the method called depends on the runtime or dynamic type of
    the caller object)
\end{itemize}

\end{document}

