Fixing protocol equals and making sure exceptions on index are always lo...

...gged
Catching an NPE is almost never a good idea, unless maybe you're working around some bug. One of the problems is the catch is not restricted to any one attempted call. It can happen in any of the statements inside the catch block, including deep in other calls. You're essentially using exceptions as flow control, but they're much more indiscriminate (not to mention slow) than flow control with `if`. Add to this that, by convention, runtime exceptions like NPE, out of bounds exceptions and illegal arguments exceptions are only thrown on programmatic errors and it should be clear you're risking hiding serious problems.