int i = 16777215;
void draw(int color) {
}
让我们说void draw期望颜色以0x前缀开头,如此
draw(0x16777215)
如果我尝试这样做会抛出语法错误
draw(0x + i)
Invalid hex literal number
int我不能包含0x部分,需要动态添加
感谢
答案 0 :(得分:10)
0x1234
只是编写整数值的另一种方式。例如,0xff
和255
完全相同。 draw(0x16777215)
和draw(376926741)
是相同的电话。在字节码级别,没有任何差异。唯一的区别在于人类阅读代码的方式;有时用字节来思考更容易,这很容易用十六进制表示。
如果数字以0x
开头,则表示其余数字被解释为十六进制。而不是0x16777215
,我猜你想要16777215
(没有0x
),这也是0xFFFFFF
。
Oracle tutorial on primitive datatypes有更多的信息(比我更多的权威:))。
为了证明它在引擎盖下是完全相同的,你可以看一些反汇编的代码。考虑这个课程:
public class Hexes {
public static int alpha = 0x16777215;
public static int beta = 376926741;
}
编译javap -c Hexes
后运行Hexes.java
会告诉您幕后发生了什么:
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
}
标记为static {}
的块是类'静态初始值设定项,其中设置了alpha
和beta
。请注意,两个字段(alpha和beta)都分配了相同的int值。如果您要编写一个简短的程序来打印出值,您会看到每个值的相同值:
public class HexesPrinter {
public static void main(String[] args) {
System.out.println(Hexes.alpha);
System.out.println(Hexes.beta);
}
}
输出:
376926741
376926741
答案 1 :(得分:2)
刚刚通过i
。没有一种方法需要一个以0x
开头的数字。如果它需要int
,那么它将采用任何int
,指定为带有0x
的十六进制文字。
另外,要小心。 0x16777215
与16777215
不同。
答案 2 :(得分:1)
我想你需要这个:
Integer.valueOf(String.valueOf(i), 16)
答案 3 :(得分:0)
首先需要了解在Java中指定基数10和基数16(十六进制)之间的区别。正如其他人所说,0x
是一个数字的前缀,表示它在16(十六进制)中。
以十六进制表示法指定颜色非常有用,因为它们具有组件(Alpha,R,G,B),当您将它们放在基础10中时,这些组件并不明显。有关详细信息,请参阅此答案:https://stackoverflow.com/a/8633244/1168342 < / p>