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
установлены. Обратите внимание, что двум полям (альфа и бета) присваивается одинаковое значение int. Если вы должны были написать короткую программу, чтобы напечатать значения, вы увидите то же значение для каждого:
public class HexesPrinter {
public static void main(String[] args) {
System.out.println(Hexes.alpha);
System.out.println(Hexes.beta);
}
}
Выход:
376926741
376926741
I подумайте, что вы неправильно поняли цель «0x». Это для целых литералов. –
16777215 (десятичный) и 0x16777215 (hex) - ДЕЙСТВИТЕЛЬНО разные значения. Вам нужно выяснить, какой из них вы хотите. – elbuild