FULL PRODUCT VERSION :
C:\Programme\Java\jdk1.6.0_03\bin>java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode)
Java SE 6.0 Update 10
ADDITIONAL OS VERSION INFORMATION :
Windows XP SR-2
EXTRA RELEVANT SYSTEM CONFIGURATION :
Testcase run by NetBeans 6.5 IDE
A DESCRIPTION OF THE PROBLEM :
ConditionalExpression assumes c2bExistents.get(c) as primitive byte type instead of class type Byte.
See source code...
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run test case:
https://java-nio-charset-enhanced.dev.java.net/source/browse/java-nio-charset-enhanced/trunk/test/sun/nio/cs/MapCalculator.java?rev=489&view=markup
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
no exception should be thrown here
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Testcase: process[0](sun.nio.cs.MapCalculator): Caused an ERROR
null
java.lang.NullPointerException
at sun.nio.cs.MapCalculator.getMultiples(MapCalculator.java:507)
at sun.nio.cs.MapCalculator.printHeader(MapCalculator.java:710)
at sun.nio.cs.MapCalculator.process(MapCalculator.java:415)
Test sun.nio.cs.MapCalculator FAILED
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
Map<Character,Byte> c2bExistents = new HashMap();
char c = '\u20ac';
char directEnd = '\u0080';
Byte exsistent = c < directEnd ? (byte)(c) : c2bExistents.get(c);
Checkout complete sources from:
https://java-nio-charset-enhanced.dev.java.net/source/browse/java-nio-charset-enhanced/?rev=489
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Map<Character,Byte> c2bExistents = new HashMap();
char c = '\u20ac';
char directEnd = '\u0080';
Byte exsistent;
if (c < directEnd)
exsistent = (byte)(c);
else
exsistent = c2bExistents.get(c);
or:
Byte exsistent = c < directEnd ? (Byte)(byte)(c) : c2bExistents.get(c);