<p>An interesting issue came up recently.  We came across some code that is using <code>hashCode()</code> as a salt source for MD5 encryption but this raises the question: will <code>hashCode()</code> return the same value for the same object on different VMs, different JDK versions and operating systems?  Even if its not guaranteed, has it changed at any point up til now?</p>

<p>EDIT: I really mean <code>String.hashCode()</code> rather than the more general <code>Object.hashCode()</code>, which of course can be overridden.</p>

No. From
http://tecfa.unige.ch/guides/java/langspec-1.0/javalang.doc1.html
:
The general contract of hashCode is as
  follows:
Whenever it is invoked on the same object more than once during an
  execution of a Java application,
  hashCode must consistently return the
  same integer. The integer may be
  positive, negative, or zero. This
  integer does not, however, have to
  remain consistent from one Java
  application to another, or from one
  execution of an application to another
  execution of the same application.
  [...]