This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
The answer is very simple. The range of char is 0 to 65535, whereas the range of byte is -128 to 127 and the range of short is -32768 to 32767. Since char cannot hold negative values, you may not get the expected result when you assign a negative byte or short value to a char variable. This is why Java refuses to let you perform the assignment without an explicit cast (e.g. "short s = -128; char c = (char)s;")