The end of section 5.1.7 http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.7
says: "If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2." [See also subsequent discussion section] AFAIK, boxing uses valueOf to achieve this. On 16 November 2010 13:50, Mikael <mikael-arons...@telia.com> wrote: > As far as I know there is no guarantee that valueOf returns the same object > every time, it just gives class a chance to do it if it wants to. > > ----- Original Message ----- From: "lcj.dev" <lcj....@gmail.com> > To: "dev" <dev@harmony.apache.org> > Sent: Tuesday, November 16, 2010 2:44 PM > Subject: Question about Character.valueOf() > > >> Hi, all >> Why this may be failed for other JREs? assertSame(Character.valueOf(c), >> Character.valueOf(c)). >> Thanks. >> >> please refers to this test case for details: >> package org.apache.harmony.luni.tests.java.lang; >> >> import junit.framework.TestCase; >> >> public class CharacterImplTest extends TestCase { >> >> public void test_valueOfC() { >> // test the cache range >> for (char c = '\u0000'; c < 512; c++) { >> Character e = new Character(c); >> Character a = Character.valueOf(c); >> assertEquals(e, a); >> >> // WARN: this assertion may not be valid on other JREs >> assertSame(Character.valueOf(c), Character.valueOf(c)); >> } >> // test the rest of the chars >> for (int c = '\u0512'; c <= Character.MAX_VALUE; c++) { >> assertEquals(new Character((char) c), Character.valueOf((char) >> c)); >> } >> } >> } >> 2010-11-16 >> >> >> >> lcj.dev > >