Javaで以下のようにint型の変数にchar型を代入してもコンパイル・実行できる理由がよくわかりません。
なぜコンパイルできるのか?また、なぜ出力がこの値になるのか分かる方いませんでしょうか。

public class Test {
  public static void main(String[] args) {

    int i = 'あ';

    System.out.println(i);
  }
}

▼実行結果

12354