"hi there".equals("cheers !") == true This is because in the JDK 1.3 SUN is caching the hash code so if it once is calculated, it doesn't get recalculated, so if the value field changes, the hashcode stays the same. http://www.artima.com/forums/flat.jsp?forum=106&thread=4864 How to Modifying an Application without Modifying Its Source Code, with {-Xbootclasspath/p:} - http://www.ddj.com/architect/218501561;jsessionid=ZVULO0S3MMM4OQSNDLPCKH0CJUNN2JVN?_requestid=186396 Override string! - http://www.javacodegeeks.com/2011/10/weird-funny-java.html