short和int问题

天地炫舞 2017-09-18 06:25:41
以前对于java基本数据类型总是在用,但是却很少关心一下细节,我遇到一个问题,求大神解释。


问题说明:
我使用eclipse进行编程的,看我的截图,按道理整形数字默认int类型,为何第一个 short a=1;不报错,而short e=d;报错
这是为什么?

请不要说第二个需要强转,因为为何第一个不需要强转?
也请不要说直接赋值和变量赋值不一样,如何认为是这样,请从java底层来具体的解释
...全文
634 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿尔法单身狗 2017-09-19
  • 打赏
  • 举报
回复
第一个是Java的常量优化机制
XxPingEr 2017-09-19
  • 打赏
  • 举报
回复
一个是定义值,一个是赋值
自由自在_Yu 2017-09-19
  • 打赏
  • 举报
回复
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 另外short a=1;不报错是因为定义的a就是short类型,不是说先定义了“1”是int,然后把1这个int类型的值赋给short了 而是这里的1本身就是short.定义成什么类型就是什么类型,short是16位的二进制,int是32位的二进制,short可以转int,只需要把short前面补16个零就行了
JOKER叔叔 2017-09-19
  • 打赏
  • 举报
回复
引用 1 楼 u012934325 的回复:
第一个赋值没有报错 是因为你定义的是short类型 值域范围是-128~127 1在这个范围内,所以编译通过,第二个是因为你定义的d是一个int类型,当你给d赋值为4的时候,这个4属于int类型,当你使用d赋值给short类型的e的时候,就如同你把一个大西瓜丢进一个茶碗一样,编译器只认识4是一个int数据类型,将一个大数据类型装进小的数据类型,会发生溢出,虽然4也符合-128~127,但是此时4属于int类型
一个字节,低八位二进制是255,一半正一半负,-128到127是byte值范围,int范围是正负20多亿
JOKER叔叔 2017-09-19
  • 打赏
  • 举报
回复
简单说,short i =1;这是在给i赋(值),short i=b;是在把一个一个(int值)赋值给short,综合楼上,结贴,谢谢
自由自在_Yu 2017-09-19
  • 打赏
  • 举报
回复
引用 8 楼 pany1209 的回复:
[quote=引用 7 楼 q54244125 的回复:] [quote=引用 4 楼 yuxiangaaaaa 的回复:] short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 另外short a=1;不报错是因为定义的a就是short类型,不是说先定义了“1”是int,然后把1这个int类型的值赋给short了 而是这里的1本身就是short.定义成什么类型就是什么类型,short是16位的二进制,int是32位的二进制,short可以转int,只需要把short前面补16个零就行了
[/quote] [/quote]
李德胜1995 2017-09-19
  • 打赏
  • 举报
回复
引用 7 楼 q54244125 的回复:
[quote=引用 4 楼 yuxiangaaaaa 的回复:] short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 另外short a=1;不报错是因为定义的a就是short类型,不是说先定义了“1”是int,然后把1这个int类型的值赋给short了 而是这里的1本身就是short.定义成什么类型就是什么类型,short是16位的二进制,int是32位的二进制,short可以转int,只需要把short前面补16个零就行了
[/quote]
天涯若风 2017-09-19
  • 打赏
  • 举报
回复
引用 4 楼 yuxiangaaaaa 的回复:
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 另外short a=1;不报错是因为定义的a就是short类型,不是说先定义了“1”是int,然后把1这个int类型的值赋给short了 而是这里的1本身就是short.定义成什么类型就是什么类型,short是16位的二进制,int是32位的二进制,short可以转int,只需要把short前面补16个零就行了
墨笙弘一 2017-09-18
  • 打赏
  • 举报
回复
第一个赋值没有报错 是因为你定义的是short类型 值域范围是-128~127 1在这个范围内,所以编译通过,第二个是因为你定义的d是一个int类型,当你给d赋值为4的时候,这个4属于int类型,当你使用d赋值给short类型的e的时候,就如同你把一个大西瓜丢进一个茶碗一样,编译器只认识4是一个int数据类型,将一个大数据类型装进小的数据类型,会发生溢出,虽然4也符合-128~127,但是此时4属于int类型

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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