1.边界值问题,为什么当byte b=127,byte(b+1)==-128
这是由于byte占用一个字节即八位内存,当b=127时,二进制表示为:01111111,
当加一后,二进制变为10000000,即-128
2.Java浮点型飘值问题
浮点数采用尾数加阶码类似于科学计数法
飘值即:浮点数运算时,产生的误差,损失精确度。
解决方法:
(1)BigDedcimal类
将double表示形式转换为BigDecimal (不建议使用)
public BigDecimal(double val)
将int表示形式转换成BigDecimal
public BigDecimal(int val)
将String表示形式转换成BigDecimal
public BigDecimal(String val)
3.字符编码问题
(1)ASCII码:最早的字符编码。包括52个大小写字符,加上控制字符,共128个字符编码。一个字节的最高位置没有使用。缺点为无法识别他国语言。
(2)ASCII扩展码,利用最高位的使用,对于ASCII码进行改进,可得到256个字符编码。然而此编码仍不能满足他国语言的需要。只有单个字节的问题很突出。
(3)Unicode,即万国码,是一种符号集,满足所有国家的使用,但缺少规定如何存储一个符号的二进制编码。
(4)UTF-8,一种能变长的Unicode,能用于单字节和多字节的存储
对于单字节:
第一位设为0,其他位为unicode码,和ASCII码相同
对于多字节:字节数为n
第一个字节的前n位设为1,n+1位为0,其他字节前两位一律为10,剩余的二进制位为unicode码
(5)GB2312和GBK
为了处理汉字