Как вы указываете байтовый литерал в Java? - PullRequest
215 голосов
/ 04 марта 2011

Если у меня есть метод

void f(byte b);

как я могу вызвать его с числовым аргументом без приведения?

f(0);

выдает ошибку.

Ответы [ 6 ]

269 голосов
/ 04 марта 2011

Вы не можете. Базовая числовая константа считается целым числом (или длинной, если за ней следует буква «L»), поэтому вы должны явно уменьшить ее до байта, чтобы передать его в качестве параметра. Насколько я знаю, ярлыка нет.

111 голосов
/ 04 марта 2011

Боюсь, что вы должны разыграть:

f((byte)0);

Я считаю, что будет выполнено соответствующее преобразование во время компиляции вместо выполнения времениТаким образом, это не приведет к снижению производительности.Это просто неудобно: (

28 голосов
/ 20 октября 2013

Вы можете использовать байтовый литерал в Java ... вроде.

    byte f = 0;
    f = 0xa;

0xa (int literal) автоматически приводится к байту.Это не настоящий байтовый литерал (см. JLS и комментарии ниже), но , если он крякает как утка, я называю это уткой.

То, что вы не можете сделать, это:

void foo(byte a) {
   ...
}

 foo( 0xa ); // will not compile

Вы должны разыграть следующее:

 foo( (byte) 0xa ); 

Но имейте в виду, что все они будут компилироваться, и они используют «байтовые литералы»:

void foo(byte a) {
   ...
}

    byte f = 0;

    foo( f = 0xa ); //compiles

    foo( f = 'a' ); //compiles

    foo( f = 1 );  //compiles

Конечно, это тоже компилируется

    foo( (byte) 1 );  //compiles
10 голосов
/ 04 марта 2011

Если вы передаете литералы в коде, что мешает вам просто объявить это заранее?

byte b = 0; //Set to desired value.
f(b);
5 голосов
/ 04 марта 2011

Как насчет переопределения метода с помощью

void f(int value)
{
  f((byte)value);
}

это позволит f(0)

0 голосов
/ 13 мая 2015

В Java 7 и более поздних версиях вы можете указать байтовый литерал следующим образом: byte aByte = (byte)0b00100001;

Ссылка: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html

...