Search code examples
javaintegerhexparseint

numeric type parse functions exception with negative numbers


System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception

When I try to convert hexadecimal number to integer type, negative numbers with parseInt or valueOf methods, the method throws NumberFormatException for negative numbers. I couldn't find the answer anywhere.


Solution

  • Integer.parseInt() and Integer.valueOf() expect the minus sign (-) for negative values.

    Hence "FFFFFFFF" is parsed as a positive value, which is larger than Integer.MAX_VALUE. Hence the exception.

    If you want to parse it as a negative value, parse it as long and cast to int:

    System.out.println((int)Long.parseLong("FFFFFFFF", 16));
    

    prints

    -1