I have a small doubt regarding Boxing and Unboxing in C#.
System.Int32 j = i;
No, that's not boxing at all.
int is just an alias for
System.Int32. That code is equivalent to:
int i = 1; int j = i;
For boxing to occur, there has to be a conversion to a reference type, e.g.
int i = 1; object j = i;
int i = 1; IComparable j = i;