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 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" > To: "dev" > 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 > >