It's a question for the SCJP forum, not for the SCBCD one... But the answer is:
Implicit Cast (Narrowing) is only possible with integers literals. It's mean you can cast implicitly to: - byte (if the value is < 128) - short (if the value is < 32768) - char (if the value is < 65536)
There's no implicit cast with two variable. But in your case, the int i is final, so it's considered as literal by the compiler.