int i = 16777215;
void draw(int color) {
}
Lets say void draw expects the color to start with the 0x prefix like so
draw(0x16777215)
If I try this it throws a syntax error
draw(0x + i)
Invalid hex literal number
int i cannot contain the 0x part, it needs to be dynamically added
thanks
0x1234 is just another way of writing an integer value. For instance, 0xff and 255 are exactly the same thing. draw(0x16777215) and draw(376926741) are identical calls. At the bytecode level, there's not any difference. The only difference is to how it appears to a human reading the code; sometimes it's easier to think in terms of bytes, which are easily expressed in hex.
If a number starts with 0x, it means the rest of the digits are interpreted as hex. Instead of 0x16777215, I'm guessing you wanted 16777215 (without the 0x), which is also 0xFFFFFF.
The Oracle tutorial on primitive datatypes has a bit more information (and more authority than I do :) ).
To demonstrate that it's all the same under the hood, you can look at some disassembled code. Consider this class:
public class Hexes {
  public static int alpha = 0x16777215;
  public static int beta = 376926741;
}
Running javap -c Hexes after compiling Hexes.java will show you what's happening under the hood:
Compiled from "Hexes.java"
public class Hexes {
  public static int alpha;
  public static int beta;
  public Hexes();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
  static {};
    Code:
       0: ldc           #2                  // int 376926741
       2: putstatic     #3                  // Field alpha:I
       5: ldc           #2                  // int 376926741
       7: putstatic     #4                  // Field beta:I
      10: return
}
The block labeled static {} is the class' static initializer, where alpha and beta are set. Note that the two fields (alpha and beta) are both assigned the same int value. If you were to write a short program to print the values out, you'd see the same value for each:
public class HexesPrinter {
    public static void main(String[] args) {
        System.out.println(Hexes.alpha);
        System.out.println(Hexes.beta);
    }
}
Output:
376926741
376926741
                        Just pass i.  There is no such thing as a method that expects a number that starts with 0x.  If it takes an int, then it will take any int, specified as a hexadecimal literal with 0x or not.
Also, be careful.  0x16777215 is a different number than 16777215.
I guess you need this:
Integer.valueOf(String.valueOf(i), 16)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With