Why do the primitive array classes need to be exposed?

We’re comparing having a native array (int[]) and a wrapped one (Integer[]).

The native one is faster to read/write, but the wrapped does not need to be entirely converted each time it crosses a generic boundary.

If you are going to use generic operations, the native array will only perform better in cases where the ratio of native access vs wrapped access (in the generic methods) is very high. In the generic method, you pay the regular wrapped read/write overhead but also the overhead of wrapping the whole array.