Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Wiki Markup
This noncompliant code example prints {{100}} as the size of the {{HashSet}} while it is expected to print {{1}}. The combination of values of types {{short}} and {{int}} in the operation {{i-1}} leads to autoboxing of the result into an object of type {{Integer}}. (See guideline [INT10-J. Be aware of integer promotionspromotion behavior].) The {{HashSet}} contains values of only one type {{Short}}, whereas the code attempts to remove objects of the (different) type {{Integer}}. As a result, the remove operation is equivalent to a _No Operation_ (NOP). The compiler enforces type checking so that only {{Short}} values are inserted; however, a programmer is free to remove an object of any type without triggering any exceptions because {{Collections<E>.remove()}} accepts an argument of type {{Object}} and not {{E}}. Such behavior can result in unintended object retention or memory leaks \[[Techtalk 2007|AA. Bibliography#Techtalk 07]\].

...