コード中に数値を書いた場合、その数値は何型として扱われるんでしょうか?


■疑問に思ったコード
1: public class Test {
2:  public static void main(String args[]){
3:    byte b = 7;
4:    byte b2 = b*2;    //コンパイルエラー。エラー内容→型の不一致。intからbyteに変換できません。
5:    int i = b;
6:    int i2 = 7;
7:    String s = 7;    //コンパイルエラー。エラー内容→intからStringには変換できません。
8:    String s2 = b;    //コンパイルエラー。エラー内容→byteからStringには変換できません。
9:  }
10: }


■補足
3行目でエラーがでないのは、7がbyte型だから?
7行目でエラーが出てるけど、7がint型として扱われてるっぽいエラー内容。
7がint型なら、なぜ3行目はエラーにならない?