自学java 发现的一个小疑点 求指教

自学java 发现的一个小问题 求指教
      
public class ForDemo {
public static void main(String [] args){
                                     char c1= '2'  ;
int b1=c1 + '0';
int b2=c1 - '0';
System.out.println(“b1: ”+b1+"  "+"b2: "+b2);

编译运行结果为b1: 98       b2:  2
为什么b1与b2的结果不一样呢?求大仙指教
------解决方案--------------------
字符2和0分别对应的ASCII码
是 50和48 
------解决方案--------------------
隐式转化有叫自动类型转换。由系统自动完成的类型转换.
从存储范围小的类型到存储范围大的类型:
byte ->short(char)->int->long->float->double
计算时会先将char类型转换成int型,分别对应50,48,然后在进行计算
------解决方案--------------------
自动类型转换了
------解决方案--------------------
你用字符做加减运算的时候其实系统会先查询该字符的码表,找到对应的数字,然后再用这个数字做运算,得出来的结果再找码表中此数字对应的字符,所以显示出来的不一样。