The constructor that accepts
string for wrapper classes is more restrictive from the one that accepts primitives. That is why you can't pass a hex string value.
Take this for an example:
Double d1 = new Double("010");
d1.doubleValue(); // print the result
is treated as an integer number of base 10, the leading zero (which represents that the number is octal) is simply ignored. So the value stored in 'd1' is 10, and not 12 as you might expect.