¿Cómo se especifica un byte literal en Java?

Resuelto Charbel asked hace 13 años • 6 respuestas

si tengo un metodo

void f(byte b);

¿Cómo puedo llamarlo con un argumento numérico sin emitir?

f(0);

da un error.

Charbel avatar Mar 04 '11 19:03 Charbel
Aceptado

No puedes. Una constante numérica básica se considera un número entero (o largo si va seguida de una "L"), por lo que debes reducirla explícitamente a un byte para pasarla como parámetro. Hasta donde yo sé, no hay atajos.

Robin avatar Mar 04 '2011 12:03 Robin

Tienes que lanzar, me temo:

f((byte)0);

Creo que eso realizará la conversión adecuada en tiempo de compilación en lugar de en tiempo de ejecución , por lo que en realidad no causará penalizaciones de rendimiento. Es simplemente un inconveniente :(

Jon Skeet avatar Mar 04 '2011 12:03 Jon Skeet

Puedes usar un byte literal en Java... más o menos.

    byte f = 0;
    f = 0xa;

0xa(int literal) se convierte automáticamente en byte. No es un byte literal real (ver JLS y comentarios a continuación), pero si grazna como un pato, lo llamo pato.

Lo que no puedes hacer es esto:

void foo(byte a) {
   ...
}

 foo( 0xa ); // will not compile

Tienes que emitir de la siguiente manera:

 foo( (byte) 0xa ); 

Pero tenga en cuenta que todos estos se compilarán y utilizarán "bytes literales":

void foo(byte a) {
   ...
}

    byte f = 0;

    foo( f = 0xa ); //compiles

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

    foo( f = 1 );  //compiles

Por supuesto, esto también se compila.

    foo( (byte) 1 );  //compiles
RickHigh avatar Oct 20 '2013 11:10 RickHigh