Java可能损失精度

来源:百度知道 编辑:UC知道 时间:2024/06/09 14:00:09
import java.util.*;

class Hash
{
public static void main(String[] args)
{
char A='a'+3;
int i=3;
char B='a'+i; //错误:可能损失精度;为什么这个错了,上面的一个没错?
}
}

char A='a'+3; a和3都是char类型的相加,没问题

int i=3; 定义int 类型的变量i的值为3

char B='a'+i; 这种写法是错误的,int类型占用4个字节,char类型占用2个字节,JAVA是不容许int自动转换为char类型的
如果要强制转换是要这样写的char B=(char) ('a'+i);
但是这样会损失精度的
int的2进制是32位
char的2进制是16位
int强制转换为char的话,JAVA只截取int的32位的后16位,精度就这样损失了

第一个是加上一个数值,3并没有分配内存空间
第二个是为3申请了一个int型的空间4个字节
而char是2个字节,int 和 char 相加会损失精度

char B=(char)('a'+i);即可