It sets result to the (unsigned) value resulting from putting the 8 bits of value in the lowest 8 bits of result.
The reason something like this is necessary is that byte is a signed type in Java. If you just wrote:
int result = value;
then result would end up with the value ff ff ff fe instead of 00 00 00 fe. A further subtlety is that the & is defined to operate only on int values1, so what happens is:
valueis promoted to anint(ff ff ff fe).0xffis anintliteral (00 00 00 ff).- The
&is applied to yield the desired value forresult.
(The point is that conversion to int happens before the & operator is applied.)
1Well, not quite. The & operator works on long values as well, if either operand is a long. But not on byte. See the Java Language Specification, sections 15.22.1 and 5.6.2.