A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunny~ 中级黑马   /  2014-8-3 23:14  /  3787 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b= 3;    3默认为int类型     貌似int比byte高啊为什么这句是自动类型转化    不是高转低则要强转。不应该这样写吗byte b= (byte)3;

19 个回复

倒序浏览
右边只有运算时,才会有转换,这是赋值啊,而且3也在Byte范围内。
回复 使用道具 举报 1 0
这是在声明
回复 使用道具 举报
回复 使用道具 举报
byte b=3;  3是int型,byte在接收的时候会把int前三个全为0的字节砍掉。如果前三个字节有1,则会报错。


回复 使用道具 举报
强制类型转换吧,3在byte的范围之内。
回复 使用道具 举报
3是常量,为int类型,会被Java自动强制转换成byte类型
回复 使用道具 举报
基础课程没有听好。由于定义的默认值是int类型,我们都会认为 byte b = 3;是一种强制转换。需要在前面加byte。变成byte b = (byte)3;这个是一种误解,3是int类型的数也是byte类型的数。只要数值没有超过127,就可以直接赋值。是属于自动转换。这是我的理解。希望对你有帮助。
回复 使用道具 举报
byte b=3;这句话的功能有两个,但是是一步完成的,将3赋值给b,同事自动完成转换工作。
但是b=b+3;的话就会报错,他是两步工作,先运行x+5,再将结果赋值给x。
而b+=3;这句话的意义和第一句一样,都是一步完成的,至于他为什么这样子完成的那我就不知道了,这是我当初看视频时做的笔记。
回复 使用道具 举报
自动类型提升啊
回复 使用道具 举报
不需要写成(byte )3.因为Byte范围是  负128 到 127之间,3在Byte的范围之内,所以不需强转。如果超过了这个范围就需要强转。
回复 使用道具 举报
zhuohong_xiao 发表于 2014-8-3 23:57
基础课程没有听好。由于定义的默认值是int类型,我们都会认为 byte b = 3;是一种强制转换。需要在前面加by ...

强制类型转化  可以自动实现?
回复 使用道具 举报
碎流 发表于 2014-8-4 00:18
自动类型提升啊

这是提升?   这不是下降吗     int   降为byte
回复 使用道具 举报
zhuohong_xiao 发表于 2014-8-3 23:57
基础课程没有听好。由于定义的默认值是int类型,我们都会认为 byte b = 3;是一种强制转换。需要在前面加by ...

long l = 3;  这个是自动类型转化       也就是int的3提升为long的3,   往更小的字节存不是要强制转换吗
回复 使用道具 举报
一楼正解~~~~~~~~~~
回复 使用道具 举报
不用。这知识普通的赋值运算。如果程序是这样的:byte b = 3+2; 这样就该强制转换了,因为右边有运算,运算完了是int类型,而你左边的变量b是int的。这时要强制转换。楼主的程序是赋值运算,右边不涉及运算,直接赋值就ok

点评

同学你这是在忽悠楼主啊 byte b = 3+2; 不会强制转换的!由于右边的操作数是常量,只要不越界还是byte类型的,不信你可以自己编译试试。。。。。。  发表于 2014-8-4 21:13
回复 使用道具 举报
这是一个赋值问题啊,把3赋给一个byte型!
回复 使用道具 举报
sunny~ 发表于 2014-8-4 11:35
强制类型转化  可以自动实现?

这只是一个简单的赋值运算。自动是我自己的一种理解。估计这么纠结下去都凌乱了啊。
回复 使用道具 举报
这只是定义b而已  并且3也是在byte的范围类    所以这样写是没问题的   不存在强转关系啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马