JAVA中默认的数值类型是int.那为什么byte a=10可以赋值?

JAVA中默认的数值类型是int.那为什么bytea=10可以赋值?int类型的10赋值给byte类型变量是向下转型,不是要强制转型吗?... JAVA中默认的数值类型是int.那为什么byte a=10可以赋值?int类型的10赋值给byte类型变量是向下转型,不是要强制转型吗? 展开
 我来答
ii...7@sina.com
2017-01-03 · 超过28用户采纳过TA的回答
知道答主
回答量:125
采纳率:0%
帮助的人:25.5万
展开全部
byteshortintlong这几种类型都是java中的整数类型你肯定对int比较了解,byte和int的区别是int是32位,byte是8位,表示的数字范围为:-128到+127所以第一个byte中元素都没超过范围,都以数字显示。第二个byte数组中的元素都是char类型,char类型是占16位的,一般转换为byte是由大到小,需要强制转换,但这些char并没有超出byte的范围,所以不用在打印时会将char元素转换成对应的ascii码,具体你可以去查toString的确是输出字母,但'a'是字符,不是字符串,两个完全不同的概念字符串+primitive类型就是转换为字符型的最简单方法,例:4+""将数字4转换为字符串4现在的4不再是数字,而是字符串,懂?
自在逍遥的空大
2020-06-10
知道答主
回答量:1
采纳率:0%
帮助的人:606
展开全部

10默认为int,在二进制(内存)中表示为:00000000 00000000 00000000
00001010;

10占用4字节,而byte只有1字节,按理来说是不能赋值的;

在赋值时,编译器进行检查(注:编译器仅检查语法错误,所以byte a
= 10;编写正确,编译通过),发现二进制的有效位数值位于byte范围内(即进行了自动类型转换,现在是00001010),去除前三个字节

10在内存中为:

00000000    00000000    00000000    00001010    4字节

byte只有

00000000                                                                1字节

但10的有效位只有1字节,所以除去无效位,即:

000000001010

反之:以此例为例,若前三位包含有效位数字

byte a = 1000

转为二进制为:00000000    00000000    00000011    11101000

前三位包含有效数字,不能进行自动转换,因此出现语法错误,编译器报错

或:按照简化理解

byte范围为-128~127之间,a = 10,10没超过byte范围,当然赋值没问题

试验表明我这种理解也成立,赋值为-128时无错误,赋值为-129时编译器报错

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式