class Intandchar {
  public static void main (String args[]) {
    int n = 'a';
    System.out.print(n);
  }
}
上面这段中字符型可以自动转换成整型赋给n
class Charleft {
  public static void main (String args[]) {
    char ch = 'A';
    ch = (char)(ch|32);
    System.out.print(ch);
  }
}
上面这段中,提示ch|32得到的是int型,需要强制转换成char才能赋给ch,为什么?谢谢。

解决方案 »

  1.   

    java的數字常數被視為int型...故ch | 32,ch轉為int型,其式子的結果為int型,故需顯示轉換
      

  2.   

    char类型是用unicode码存储的,也就是说你的字符型其实存进去的整型,所以第一段代码不需要强制类型转换,反之则不行。
    去查查unicode编码就明白了。
      

  3.   

    因为 ch|32 中,左操作数为char型,右操作数为int型,这个时候会将char型转换成int型,然后再进行计算,最后得到的结果是int型的。
    将一个int型的值赋给一个char型变量是需要强制转换的。介意楼主找点这方面的资料看下
      

  4.   

    int 4个字节   char 占两个字节
    char到int不需要强制转换   int到char需要强制转换我的理解
      

  5.   

    ch|32的时候自动将低级的char类型提升为int类型,所以结果是int型,要赋值给char型需要做转换
      

  6.   

    java做运算的最小单位为int,位操作时,将小于int的操作数都转成int在处理,结果也为int。若遇到比int大的操作数,就转成更大的那一种。所以结果为int。并非是遇到后面的int值32。
      

  7.   

    int 比 char 大,所以int值不能直接赋给char,要手动进行强制转换。
      

  8.   


    任何char,short,byte和int 做运算都要吧他们转化为int类型再计算。比如char的某个值a 和32做按位或 运算,则必须吧char转化为int
      

  9.   


    int型 表示的范围大于char
      

  10.   

    就和这个差不多
    int a = 10*10;
    double b = 10*10.0;
      

  11.   

     
    那我就来个总结吧
    JAVA 有两种转换基本类型的方法:
    1,自动提升
    2,强制转换
    在运算表达式中,基本类型的数据会自动提升,提升的规则如下:1.所有的int和char型的值都会自动提升到int值。
    2.所有的byte型和short型的值都被提升到int值。
    3.整数运算时,如果有一个运算符是long型,则其他运算符的值都被提升到long型
    4.浮点运算时,如果有一个运算符是float型,则运算符都提升到float型。
    5.浮点运算时,如果有一个运算符是double型,则其他的运算符都提升到double型。
    看到了这个规则我想你已经明白了。
    两者内容是兼容的,或者目标类型的范围比源类型的范围大,就会发生自动提升。相反的话,就需要强制类型转换了。
    强制转换类型:当两者类型不兼容,或者目标类型范围比源类型范围小时,就必须强制转换了。
      

  12.   

    右边ch/32是int类型,左边ch是char类型,故应该做强制类型转换!