Réponses:
Vous ne pouvez pas. Une constante numérique de base est considérée comme un entier (ou longue si elle est suivie d'un "L"), vous devez donc explicitement la convertir en octet pour la passer en paramètre. Pour autant que je sache, il n'y a pas de raccourci.
byte b(int i) { return (byte) i; }
quelque part et l'importer statiquement. Ensuite, vous pouvez écrire f (b (10)).
Vous devez lancer, j'ai peur:
f((byte)0);
Je crois que cela effectuera la conversion appropriée au moment de la compilation au lieu du temps d' exécution , donc cela ne causera pas réellement de pénalités de performances. C'est juste gênant :(
Vous pouvez utiliser un littéral d'octet en Java ... en quelque sorte.
byte f = 0;
f = 0xa;
0xa
(int littéral) est automatiquement converti en octets. Ce n'est pas un vrai littéral d'octets (voir JLS et commentaires ci-dessous), mais si ça craque comme un canard, je l'appelle un canard.
Ce que vous ne pouvez pas faire, c'est ceci:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Vous devez lancer comme suit:
foo( (byte) 0xa );
Mais gardez à l'esprit que ceux-ci seront tous compilés, et ils utilisent des "littéraux d'octet":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Bien sûr, cela compile aussi
foo( (byte) 1 ); //compiles
1
est un littéral int, mais se double d = 1;
compile très bien.
byte b(int i){}
, puis b(1)
aussi longue et moins compliquée que f=1
.
Si vous passez des littéraux dans le code, qu'est-ce qui vous empêche de simplement le déclarer à l'avance?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
éviter d'avoir des bugs d'extension de signe méchant.
Qu'en est-il de la substitution de la méthode avec
void f(int value)
{
f((byte)value);
}
cela permettra f(0)
Avec Java 7 et versions ultérieures, vous pouvez spécifier un littéral d'octet de cette manière:
byte aByte = (byte)0b00100001;
Référence: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html