PUBLIC OBJECT

Hexed by converting ints to hex

Java's Integer class includes two methods for converting values into Strings. There's a general one:

/**
 * Converts the specified integer into a string
 * representation based on the specified radix.
 */
public static String toString(int i, int radix) { ... }

Plus there's also methods for commonly used bases:

/**
 * Converts the specified integer into its hexadecimal
 * string representation.
 */
public static String toHexString(int i) { ... }

/**
 * Converts the specified integer into its octal
 * string representation.
 */
public static String toOctalString(int i) { ... }

/**
 * Converts the specified integer into its binary
 * string representation.
 */
public static String toBinaryString(int i) { ... }

My expectation was that the first was simply a more general form. Given this assumption, I expected the following program to print the same three lines twice:

    public static void main(String... args) {
        System.out.println(Integer.toHexString(0xCAFE));
        System.out.println(Integer.toHexString(0xBABE));
        System.out.println(Integer.toHexString(0xCAFEBABE));
        System.out.println(Integer.toString(0xCAFE, 16));
        System.out.println(Integer.toString(0xBABE, 16));
        System.out.println(Integer.toString(0xCAFEBABE, 16));
      }

But it turns out that negative numbers have slightly surprising results when combined with arbitrary bases. The program prints the following:

cafe
babe
cafebabe
cafe
babe
-35014542

If you're emitting hex or binary data, you probably should avoid toString(int value, int radix).