public class TestChar{
public static void main(String[] args){
int i=5;
char c='d';
c=c+(char)i;//编译不通过
c='d'+(char)i;//编译通过
c+=(char)i;//编译通过
c='d'+11//编译通过
c=c+11;//编译不通过
c+=11;//编译通过
c=c+'d';//编译不通过
c+='d';//编译通过
System.out.println(c);
}
}
为什么有些情况能通过编译,有些却不能?=和+=还有什么其他区别么(指char和int相加时)?被这些问题搞得稀里糊涂,有没有一个原则性或指导性的使用规则?

解决方案 »

  1.   

    编译不通过主要是因为cannot convert from int to char
    +=等compund operators会执行隐式类型转换
    再有byte short char int这些Integral primitive types变量之间进行混合运算时 会自动提升结果类型为int
      

  2.   

    ls貞潔
    你要去看些基本的書
    java裡面要相同類型才能+的
    要么你就強轉下
      

  3.   


    public class TestChar{ 
    public static void main(String[] args){ 
    int i=5; 
    char c='d'; 
    c=c+(char)i;//编译不通过 //java中两个低级相互运算,其结果为能包含它的最小primitive,这里是结果是int
    c='d'+(char)i;//编译通过 
    c+=(char)i;//编译通过 //这里+=运算会进行自动转化的
    c='d'+11//编译通过 
    c=c+11;//编译不通过这里11默认的类型为int,char+int结果当然应该是int 
    c+=11;//编译通过 //+=运算自动转化
    c=c+'d';//编译不通过 //java中两个低级相互运算,其结果为能包含它的最小primitive,这里是结果是int
    c+='d';//编译通过 //+=运算自动转化
    System.out.println(c); 


    ]
      

  4.   

    c='d'+11//编译通过 
    c=c+11;//编译不通过?
      

  5.   

    那些基本的我有一些了解的,比如会自动提升到int啊之类的,可是还是不太理解有些的编译结果。就比方说:
    c='d'+11//编译通过 
    c=c+11;//编译不通过 
    c+=11;//编译通过 
      

  6.   

    举个例
    c = c + 11; // 编译不通过c + 11 的结果为int型的,你要把这个int型的值再赋给c(c为char型)int的值赋给char型就会发生精度丢失,所以编译不通过
      

  7.   

    int i=5; i是整型 
    char c='d'; c是字符型c=c+(char)i;//编译不通过 字符型加字符型是不行的,只有字符串型的就可以用+相连c='d'+(char)i;//编译通过 这时可看作是d的阿斯克码值+5所代表的字符c+=(char)i;//编译通过 此同上c='d'+11//编译通过 此同上c=c+11;//编译不通过 字符型和整型的数据是相加不了的c+=11;//编译通过c的阿斯克码值增加11c=c+'d';//编译不通过 字符型加字符型是不行的,只有字符串型的就可以用+相连c+='d';//编译通过 'd'的阿斯克码值好像是68,那么现在的c就是c的阿斯克码值+68所代表的字符System.out.println(c); 


    为什么有些情况能通过编译,有些却不能?=和+=还有什么其他区别么(指char和int相加时)?被这些问题搞得稀里糊涂,有没有一个原则性或指导性的使用规则?
      

  8.   


    这两句有什么区别啊?还是不明白,ASC码值+int难道结果不是int?
      

  9.   


    就比如说
    char c = 'a'+1;a的asc码为97,这时候变量c的asc码为98,所以变量c = 'b';
      

  10.   

    有些还是不太理解,比如:为什么'd'可以看作是ASCII值,c就不行了?还有+=的为啥么有些就可以了?
      

  11.   

    'd'是一个字符常量,可以直接赋值给变量,如char ch = 'd'; 
    'd' + 11 也是一个常量,同理也可以赋给变量,如char ch = 'd' + 11;如果是 char a = 'a';
          char ch = a + 1;
    a和1就要进行2元运算,这个时候a提升为int型和1相加,
    计算结果为int型,最后要把这个结果赋给ch,而ch为char型,把一个int型的值赋给一个char型就会发生精度丢失,所以编译不通过
      

  12.   

    我说下吧...
    有点符号的意思在里面,但是绝大部分还是类型转化的问题
    特别是+=这个操作是自操作.在自己本身的基础上+什么东西,是没有类型转化的.
    其他情况下正如dracularking ,有从低到高的潜式转化在里面...潜式转化部分还是建议参照2L所说,他说的很好.
    他是个基础和技术都很好的人