Can someone please explain why the following compiles:

```
final short s1 = 1;
final char c1 = 1;
byte b1 = s1;
byte b2 = c1;

```

But the following doesn't (the compiler error message is `Type mismatch: cannot convert from short to byte`):

```
short s1 = 1;
char c1 = 1;
byte b1 = s1;
byte b2 = c1;

```