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 [EXP05-J. Be aware of integer promotions in binary operators].) 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. Java References#Techtalk 07]\]

...

Numeric promotion and autoboxing while removing elements from a Collection, can make operations on the Collection fail silently.

Recommendation Guideline

Severity

Likelihood

Remediation Cost

Priority

Level

EXP11- J

low

probable

low

P6

L2

...