The & , ^ , and | operators in the last three lines first convert their byte integer op-
erandsto32-bitintegervalues(through sign bit extension ,copyingthesignbit'svalue
into the extra bits) before performing their operations.
Thecastoperator— ( type ) —attemptstoconvertthetypeofitsoperandto type .This
operator exists because the compiler will not allow you to convert a value from one
type to another in which information will be lost without specifying your intention do
so(viathecastoperator).Forexample,whenpresentedwith short s = 1.65+3; ,
pointvaluetoashortintegerresultsinthelossofthefraction .65 — s wouldcontain4
instead of 4.65.
toexplicitlystateyourintentionbycastingtothetargettype.Forexample, short s
= (short) 1.65+3; tellsthecompilerthatyouwant 1.65+3 tobeconvertedtoa
short integer, and that you realize that the fraction will disappear.
char c = 'A';
byte b = c;
The compiler reports an error about loss of precision when it encounters byte b
= c; . The reason is that c can represent any unsigned integer value from 0 through
65535, whereas b can only represent a signed integer value from -128 through +127.
Eventhough 'A' equatesto+65,whichcanfitwithin b 'srange, c couldjusthaveeas-
ily been initialized to '\u0323' , which would not fit.
Thesolutiontothisproblemistointroducea (byte) cast,asfollows,whichcauses
the compiler to generate code to cast c 's character type to byte integer:
byte b = (byte) c;
Java supports the following primitive type conversions via cast operators:
• Byte integer to character
• Short integer to byte integer or character
• Character to byte integer or short integer
• Integer to byte integer, short integer, or character