黑马程序员技术交流社区

标题: short和char的问题 [打印本页]

作者: liu45495284    时间: 2015-7-7 22:39
标题: short和char的问题
class VarDemo {
         public static void main(String[] args) {
             short s = 100;
             char  c = s;
             System.out.println(c);
}     
}
这个为什么会报错,不是说小的到大的会自动提升吗?
作者: pathnet    时间: 2015-7-7 22:45
你同桌已经问过了
作者: 1木头1    时间: 2015-7-7 22:49
ava不像C和C++那样有许多标准未定义的东西,对基本的数据类型,Java对字长、符号、范围等都做了非常明确规定。  在Java中,char是16bit长的无符号整数,因此范围是:0~65535,而short则是16bit长的带符号整数,范围是-32768~32767。  所以,两者虽然字长相同,但意义却不一样(表示范围并不完全重合或包含),因此不管是char转换成short,还是short转换成char,都属于数值的“窄化转换”(Narrowing Primitive Conversion)。  窄化转化都可能“丢失精度”,因此必须强制转换。  虽然,这里的“丢失精度”跟从int到short的丢失精度给人的感觉似乎不一样,但仔细想想也没有什么区别,一方面,char有16个bit表示数值,而short用于表示数值大小的只有15个bit,因此,从char到short会“丢失数值精度”,而另一方面,short有1个bit表示数值的符号,而char却根本没有这么个符号位(所有的bit都用来表示数值大小了),所以从short到char也可能“丢失精度”,只是这里丢失的是有关正负的“精确程度”。
作者: limingdada    时间: 2015-7-7 22:52
楼上说的好详细 学习了。
作者: liu45495284    时间: 2015-7-7 22:55
1木头1 发表于 2015-7-7 22:49
ava不像C和C++那样有许多标准未定义的东西,对基本的数据类型,Java对字长、符号、范围等都做了非常明确规 ...

非常感谢,学习了
作者: 秀丽xl    时间: 2015-7-7 23:22
由于整数类型默认为int类型,当short类型的s赋值给c时自动转换为int类型,再赋值给char类型的c,可能会损失精度,         所以程序会报错。
作者: 小绿    时间: 2015-7-7 23:31
2楼说的详细
作者: Miss.H    时间: 2015-7-7 23:33
需要强制提升的,char  c = (char) s;自动提升是隐士转换
作者: danil_xx    时间: 2015-7-7 23:42
short类型和char类型的优先级是一样的,长度虽然都是两个字节(两个八位二进制),但是short的取值范围里有负数,而char的取值没有负数,两者的取值范围不同,这应该就是如果强制赋值给不同类型的变量会出现编译无法通过的原因了,
作者: 马利梅    时间: 2015-7-7 23:44
char c=s ;复制过程中 s为变量,默认int类型,可能会损失精度
作者: 小囧    时间: 2015-7-8 00:12
收获了,学习了
作者: 人造番茄    时间: 2015-7-8 07:12
1木头1 发表于 2015-7-7 22:49
ava不像C和C++那样有许多标准未定义的东西,对基本的数据类型,Java对字长、符号、范围等都做了非常明确规 ...

说的太仔细了,我也学到了O(∩_∩)O~
作者: Love丶cd    时间: 2015-7-8 08:12
必须的。。。学习了
作者: 虾米吃螃蟹    时间: 2015-7-8 08:13
学习了,说的详细
作者: 紫夜灵魂    时间: 2015-7-8 08:26
2楼好厉害,又长知识了。char是无符号的16位正整数  short 是有符号16位
作者: zhuoxiuwu    时间: 2015-7-8 08:30
1木头1 发表于 2015-7-7 22:49
ava不像C和C++那样有许多标准未定义的东西,对基本的数据类型,Java对字长、符号、范围等都做了非常明确规 ...

非常详细 ,学习了
作者: ym123456    时间: 2015-7-8 08:46
char c=s ;复制过程中 s为变量,默认int类型,可能会损失精度
作者: fmi110    时间: 2015-7-8 08:50
1木头1 发表于 2015-7-7 22:49
ava不像C和C++那样有许多标准未定义的东西,对基本的数据类型,Java对字长、符号、范围等都做了非常明确规 ...

很详细 学习了
作者: 桑小年    时间: 2015-7-8 21:05
这个是错的,因为这是赋值而不是运算,自动提升是运算时候使用的,例如int a = s+100;就不会出错了
作者: 钟志军zzj    时间: 2015-7-8 21:20
char和short是一个级别的
作者: 张恩祺    时间: 2015-7-8 22:10
大哥那是平级的好吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2