Hi Amit ...
Let's consider all the case again step-by-step :
==============================================================
==============================================================
In
Line 1:value '2' is by default an int but because it's value can fit on a byte an explicit cast took place .
Line 2:value '2' is by default an int so no problem.
Line 3:the mean reason (I think so)that there were no explicit cast is because 'i' is a variable and excluding that you assigned it to value '2' in line 2 but it may take any value and the big problem happens if its value is bigger than a byte one so by restricting on such case only CONSTSNTS are allowed to be automatically casted because there value won't change by anymean .
Hope I could help you understand such point somehow

.