Over a million developers have joined DZone.

Java Puzzler on Arrays

DZone's Guide to

Java Puzzler on Arrays

· Java Zone ·
Free Resource

Take 60 minutes to understand the Power of the Actor Model with "Designing Reactive Systems: The Role Of Actors In Distributed Architecture". Brought to you in partnership with Lightbend.

Today, while working with arrays I came accross a Java puzzle which made me wonder WHY IS THIS PIECE OF CODE NOT WORKING?

Java Puzzle

Can you guess whether this Junit test case will pass?

public void testMapOfArray() {

Map<String[], String[]> map = new HashMap<String[], String[]>();
map.put(new String[] { "shekhar" },
new String[] { "I am Java Developer" });
map.put(new String[] { "rahul" }, new String[] { "I am C# Developer" });

String[] description = map.get(new String[] { "shekhar" });
assertThat(description[0], IsEqual.equalTo("I am Java Developer"));

Everytime I ran this test it failed with NullPointerException.

What's the reason for this unexpected behavior?

The problem is that String[] uses object identity for equals and hashcode methodsz. So,

String[] arr1 = new String[] { "shekhar" };
String[] arr2 = new String[] { "shekhar" };

 will not match with eachother in a HashMap. 

Don't use arrays as HashMap keys. If you want to use an array as a key, then write a wrapper arround an array and override equals and the hashcode method.



Learn how the Actor model provides a simple but powerful way to design and implement reactive applications that can distribute work across clusters of cores and servers. Brought to you in partnership with Lightbend.


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}