Java语法的小问题

渡码 2015-03-03 01:16:42

short s = 20;
float f = 1.2;


1.2是double类型赋值给float提示类型不匹配, 而20是int类型赋值给short为何没有提示类型不匹配?
...全文
336 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
渡码 2015-03-09
  • 打赏
  • 举报
回复
引用 10 楼 openXMPP 的回复:
short s = 20; 这里其实是2个动作 1) short s; 声明了一个变量s,类型为short 2) 声明的同时完成了初始化, 初始化的值为20 所以这种情况下,下面的20被Java的编译器尝试与左边的s进行绑定,发现是范围内的数字,就绑定成功。 而下面这种情况就会是编译错误 int a = 20; short s = a; 提示你把一个int转换成short,注意这里int并未声明为final的 而 final int a = 20; short s = a; 是编译成功的,为什么,因为这时a就是final的,编译器把这个过程直接做了编译优化,认为等价于赋值 short s = 20;
你说的我明白了, 但是float f = 1.2; 不适用于你上述所说的那两个动作吗
乔巴好萌 2015-03-06
  • 打赏
  • 举报
回复
short s = 20; 这里其实是2个动作 1) short s; 声明了一个变量s,类型为short 2) 声明的同时完成了初始化, 初始化的值为20 所以这种情况下,下面的20被Java的编译器尝试与左边的s进行绑定,发现是范围内的数字,就绑定成功。 而下面这种情况就会是编译错误 int a = 20; short s = a; 提示你把一个int转换成short,注意这里int并未声明为final的 而 final int a = 20; short s = a; 是编译成功的,为什么,因为这时a就是final的,编译器把这个过程直接做了编译优化,认为等价于赋值 short s = 20;
code小生 2015-03-06
  • 打赏
  • 举报
回复
float f = 1.2; 这个不是赋值,而是定义,后面缺少了后缀f. 要赋值你就重新定义一个double类型的变量,然后赋值,遵循数据类型转换原则。
kissoday 2015-03-06
  • 打赏
  • 举报
回复
数据转换问题 数据转换分成显示转换和隐式转换
yetian_lin 2015-03-06
  • 打赏
  • 举报
回复
引用 6 楼 RJGCSS 的回复:
[quote=引用 5 楼 xiaoweihahajava 的回复:] 1.2后面没有后缀f;则认为1.2是double类型的,而float f=1.2,则把double类型的赋给了float类型的(类型转换不合理),所以不匹配。 short是整数类型,可以储存整数,所以,short s=20;是正常的赋值。 还有,20 是short类型不是int类型,除非:int s=20才是int类型,然后short sh=s;这样才会发生类型不匹配的现象。
难道java中的整数常量不是默认为int类型的吗[/quote] 默认是int,只不过当你给的值在short范围里面java自己帮你转换了而已。改大一点就会报错了。byte也一样
渡码 2015-03-06
  • 打赏
  • 举报
回复
引用 5 楼 xiaoweihahajava 的回复:
1.2后面没有后缀f;则认为1.2是double类型的,而float f=1.2,则把double类型的赋给了float类型的(类型转换不合理),所以不匹配。 short是整数类型,可以储存整数,所以,short s=20;是正常的赋值。 还有,20 是short类型不是int类型,除非:int s=20才是int类型,然后short sh=s;这样才会发生类型不匹配的现象。
难道java中的整数常量不是默认为int类型的吗
xiaoweihahajava 2015-03-05
  • 打赏
  • 举报
回复
1.2后面没有后缀f;则认为1.2是double类型的,而float f=1.2,则把double类型的赋给了float类型的(类型转换不合理),所以不匹配。 short是整数类型,可以储存整数,所以,short s=20;是正常的赋值。 还有,20 是short类型不是int类型,除非:int s=20才是int类型,然后short sh=s;这样才会发生类型不匹配的现象。
my_mtx 2015-03-03
  • 打赏
  • 举报
回复
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
光脚满地跑 2015-03-03
  • 打赏
  • 举报
回复
我在eclipse中试了一下,如果int值较小的话,会内部转换,较大的话会提示error 不过double转float需要显示的转化 写成1.2f 建议看下类型向上向下cast的原则
rumlee 2015-03-03
  • 打赏
  • 举报
回复
你把20改大点试试。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧