One the most common gotchas in Java, is knowing how to print arrays. If an answer on how to print an array get more than 1000 upvotes, you have to wonder if there is a simpler way. Just about every other popular language has that simpler way, so it's not clear to me why Java still does this.

Unlike other JDK classes, arrays don't have a particularly sane toString() as it is inherited from Object.

It Prints the Type and Address Right?

Actually, it doesn't print the address, it just looks as cryptic as one. It prints the internal representation of the type, and thehashCode() of the object. As all arrays are an Object, they have a hashCode() and a type and a synchronized lock, and every thing else an Object has, but no methods specific to an array. This is why the toString() isn't useful for arrays.

I think that is obvious to everyone. o_O Like the fact that J is the internal code for a long and L is the internal code for a Java class. Also Z is the code for boolean when b is unused.

What Can We Do About It?

In this program it's we end up having to write a special toString method for object needs to be called by our special method for printing a Map.Entry. Repeat this many times throughput your program and it's just easier to avoid using arrays in Java because they are hard to debug.

What About Hacking the JVM?

What we can do is change the Object.toString(). We have to change this class as it is the only parent of arrays we have access to. We cannot change the code for an array as it is internal to the JVM. There is no byte[] java class file for example for all the byte[] specific methods.

Take a copy of the source for java.lang.Object and replace the toString() with

Conclusion

While this is a cool trick, the best solution is that they finally fix Java so it produces a sane output for arrays. It knows you need one and provides it, but hides it away in a class you have to google to find, so that every new Java developer has to have a WTF moment the first time they try to work with arrays.