1、a+b结果为int,编译器编译时能够发现将结果赋给表数范围小的byte,所以需强制转换为,c=(byte)(a+b);2、int最大值赋为2147483647,此段a+b结果类型与c匹配,固而编译没问题,c=a+b的结果是程序运行时计算的,超出表数范围的进位被舍去,所以结果又回到了-3,编译器不会去计算某个二元表达式是否会产生溢出。

解决方案 »

  1.   

    〉a+b结果为int,编译器编译时能够发现将结果赋给表数范围小的byte,所以需强制转换为,c=(byte)(a+b);这个和a+b到底等于多少是没有关系的,所有的整形,除了long例如byte, short, char, int等互相之间相加(byte + char, short + short, char + int ...),结果无论是多少,一律作为int型第二点关于计算结果,当超出的时候,就好像当足球比赛打出篮球比赛的分数时可能发生的事情一样,最高位升为1,但是由于最高位不是用来计数的,而是用来表示符号的,所以变成了负数
      

  2.   

    byte + char, short + short, char + int ...都为int
    string + byte/short /int  都为string
      

  3.   

    第一个是需要进行类型转换从int 转成btye只有通过显式转换来进行.
    第二个就是出现的溢出问题了这些问题可以查看一下thinking in java这本书这本书真的不错.