java中long=后面为什么还要加个L:: byte b=3 b=b+3 怎么还能报错

 我来答
☆ヾ冰凉
2019-10-23
知道答主
回答量:10
采纳率:0%
帮助的人:6323
展开全部
整数型有隐式转换机制,浮点型没有。
常量储存,整型默认int,浮点型double。
所以赋值时。
整数型不需要声明就可以把常量赋值给整数型变量,int类型的可以直接赋值给byte,short,long(当值大于int的取值范围才声明,不声明了一样可以,可是会造成损失,为了杜绝所以才加L)
浮点型需要声明才可以把常量赋值给浮点型变量(默认double,赋值给float得加f)。
b=b+3报错,按理说int类型的可以自己强制转换的,但是你这里有个+,+-*/这种一个的都属于简单赋值,+=,=-这种有2个的是复合赋值,简单赋值没有不会强制转换,复合赋值才会自己强制转换!
所以b=b+3,b+=3,都是b变量加3,前者会报错,后者不报错。
也就是你用了+-*/本来会强制的变成了不强制的。
写2个例子
byte a=1;
byte b=1;
byte c=a+b;∥报错,运用了+,计算前需要把a和b取出来,取出来变成了int类型,再加,运用+,完了变成不强制了,就报错了!
float a=3.0F;
float b=3.0F;
floaF c=a+b;∥不报错,计算要把a和b取出来,浮点型不会自动转换,取出来还是float型,加+,运用加变成不强制转换,浮点型本来就不会自己转换,变不变一点关系都没有,所以float类型的a+b可以赋值给float c变量,不报错!
匿名用户
推荐于2017-10-10
展开全部
long a=123L; 简单类型中,常数添加L,表示是一个Long类型的数据。

byte b = b;
b=(byte(b+3); 要做强制转换,因为,有可能会超出byte范围。
追问
你这个强制转换不对啊  看了半天  b=(byte)(b+3)
强制转换是不是一般不用 用的很少
追答
这种情况,就需要使用了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
twsxtd
推荐于2017-10-08 · TA获得超过379个赞
知道小有建树答主
回答量:175
采纳率:100%
帮助的人:151万
展开全部
Java语言整数默认情况下是int类型的,因此如果你仅仅写一个 23那就是int类型的数字23,如果你想要一个长整型(long)的'23'那么就要加以区分,在后面加上L这样 23L就是 long类型的。
第二个问题,正如上面所说,直接写出来的整数默认是int类型的,而你声明的b是byte类型的,int与byte混合运算会把byte转换为int再计算,得到的结果是int类型的,但是你又赋值给了byte,就会出类型错误
更多追问追答
追问
byte b1=3;
byte b2=4;
b=b1+b2;
怎么也报错?
byte不是-128到127吗? 前面加byte不就是说这个数是byte类型
怎么还是不行
追答
对于加法运算,如果两边类型不一样,则其中一个自动转换成与另一个相同的类型,再运算;如果一样,对于比int低的类型,JVM是全部转换为int型来计算的,所以结果就似乎右边的b1+b2的结果提升为int,赋值给byte需要强制类型抓转换。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天外落云
2014-01-07 · TA获得超过295个赞
知道答主
回答量:127
采纳率:0%
帮助的人:60.3万
展开全部
因为3这种数字没有声明一般默认是int,所以long a = 3;3是int型,是错误的.应该声明成long a= 3L;
同理byte b = 3; b= b+3;左边是byte,右边是int+byte==》还是int(int,byte,char类型运算,会默认先转化成int,进行运算,b+3最终结果当然是int),所以会报错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式