int i = 16777215;
void draw(int color) {
}
Run Code Online (Sandbox Code Playgroud)
让我们说void draw期望颜色以0x前缀开头,就像这样
draw(0x16777215)
Run Code Online (Sandbox Code Playgroud)
如果我尝试这个,它会抛出语法错误
draw(0x + i)
Invalid hex literal number
Run Code Online (Sandbox Code Playgroud)
int我不能包含0x部分,需要动态添加
谢谢
ysh*_*vit 11
0x1234只是写一个整数值的另一种方式.例如,0xff并且255完全相同.draw(0x16777215)并且draw(376926741)是相同的电话.在字节码级别,没有任何区别.唯一的区别在于人类阅读代码的方式; 有时用字节来思考更容易,这很容易用十六进制表示.
如果数字以数字开头0x,则表示其余数字被解释为十六进制.而不是0x16777215,我猜你想要16777215(没有0x),这也是0xFFFFFF.
关于原始数据类型的Oracle教程有更多的信息(和比我更多的权限:)).
为了证明它在引擎盖下是完全相同的,你可以看一些反汇编的代码.考虑这个课程:
public class Hexes {
public static int alpha = 0x16777215;
public static int beta = 376926741;
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
标记的块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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
376926741
376926741
Run Code Online (Sandbox Code Playgroud)
就过去吧i。不存在需要以 开头的数字的方法0x。如果它接受 an int,那么它将接受 any int,指定为十六进制文字,带0x或不带。
另外,要小心。 0x16777215是一个与 不同的数字16777215。
| 归档时间: |
|
| 查看次数: |
13667 次 |
| 最近记录: |