Remember that a variable pointing to an Object (such as String, or Thread, or fill in the blank) contains only the location in memory where the object is stored. So str2 doesn't contain the actual object, it only tells you where to find the object.
As Ankit pointed out, == only compares the contents of the variable - in this case, the location in memory where the String object you created is stored. Two strings that contain the same characters might be separate objects, and thus would have different locations in memory. So then, when you compare their memory locations, it returns false, even though the strings are "meaningfully equal."
The Object class has a method called equals() that String overrides. It checks to see whether the strings contain the same data. Try changing it to this:
Also do see the articles Ankit linked to. This is a key concept to understand for any Java programmer.