首页 > 试题广场 >

Which lines of the following w

[单选题]
Which lines of the following will produce an error?
byte a1 = 2, a2 = 4, a3;
short s = 16;
a2 = s;
a3 = a1 * a2; 

  • Line 3 and Line 4
  • Line 1 only
  • Line 3 only
  • Line 4 only
推荐
答案:A
short类型转为byte类型出错
a1*a2结果为int类型,转为byte类型出错
编辑于 2015-02-04 12:08:43 回复(22)
数值型变量在默认情况下为Int型,byte和short型在计算时会自动转换为int型计算,结果也是int 型。所以a1*a2的结果是int 型的。
发表于 2015-08-25 23:33:54 回复(19)
byte+byte=int,低级向高级是隐式类型转换,高级向低级必须强制类型转换,byte<char<short<int<long<float<double
发表于 2015-07-30 20:42:36 回复(8)

byte b=2,e=3;
byte f= b+e;

以上代码不能通过编译,应改为:

byte b=2,e=3;
byte f=(byte) (b+e);//因为byte,char,short会自动转为int,这里必须强制转换为byte

 

但+=运算符不会产生类型转换,如:

short s=1;s=s+1;编译错误

short s=1;s+=1;正确

发表于 2015-05-05 14:36:28 回复(4)
Java中涉及byte、short和char类型的算术运算首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。如果需要对byte/short/char类型的变量进行运算操作得到byte类型结果,必须将这个int类型的结果显式转换为byte类型。进行数值运算时要注意可能会发生溢出错误。如本题中Line4代码a1*a2的结果已被隐式转换为int类型,将其赋值给a3时要进行显示转换(在不溢出的情况下) 
a3 = (byte)a1 * a2; 
java各基本类型变量之间运算操作的隐式转换总结:除了自增和自减操作不进行转化外,其它操作都是无long型时,所有非int类型均隐式转成int类型;有long类型时,所有类型都隐式转成long类型。
其他操作主要包括各种算数运算、各种位运算等。
参考:http://www.51itong.net/java-byte-short-char-int-long-4962.html
发表于 2016-06-03 18:55:47 回复(2)
byte,short,char(或三者的混合) 参与运算 ,会自动提升为int。
发表于 2015-10-21 11:02:07 回复(2)
注意:自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
    低--------------------------------------------->高
    byte,short,char-> int -> long -> float -> double
Line3:byte,short,char是同级别的,不能自动转换,需要加强转,所以line3错误
Line4:java中如果碰到char、byte和short参与运算时(注意是运算时候),会自动把char byte short类型转换为int类型进行计算,所以a1 * a2的结果也是int类型的,但是a3还是byte类型的,从int类型到byte类型就需要强制转换(低级到高级的时候才会隐式自动转换),所以line4错误
发表于 2017-03-09 22:14:17 回复(3)

JVM 操作码一共256个,其中乘法的只有imul,lmul,fmul,dmul,byte和short会转为int用imul指令,计算结果也是int。int隐式转byte错误。当然像go这样更把简洁奉为自己的行为哲学的语言是不支持隐式转换的。

参考The Java® Virtual Machine Specification Java SE 8 Edition

Math相关的操作码

编辑于 2018-03-04 15:50:23 回复(0)
a1和a2单独的时候为byte类型,但是当他们相乘的时候就隐转为int类型的,由于a3为byte类型,如果必须执行必须强转才不会报错
发表于 2015-10-20 17:22:19 回复(0)
这题不是第三行就开始抱报错了,怎么还要继续往下看?
发表于 2018-01-10 08:44:34 回复(1)
自动数据类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
    低--------------------------------------------->高
    byte,short,char-> int -> long -> float -> double
强制数据类型转换
强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。
有的数据经过转型运算后,精度会丢失,而有的会更加精确.
发表于 2016-08-24 14:05:39 回复(1)
高级向低级必须强制类型转换,byte<char<short<int<long<float<double
发表于 2016-01-10 20:48:09 回复(0)
注意:由高精度类型转为低精度类型时会损失精度,所以需要进行强转。(低转高不需要)
        故line 3:将short转为byte需要强转否则报错。
            line 4:比int精度低的数值进行运算时先转为int再运算,将int赋值给byte需要强转。
发表于 2022-08-06 17:52:16 回复(0)
选的B。 
开始以为a3没有赋初值会报错,做完这题才知道,局部变量只要在参加运算之前都可以赋初值。
发表于 2020-04-24 18:55:15 回复(0)
第4行:byte*byte运算转为int,因为低级向高级是隐式类型自动转换,但是高级向低级必须强制类型换。
类型级别:byte<char<short<int<long<float<double
发表于 2018-01-15 20:01:06 回复(0)
byte,short,char(或三者的混合) 参与运算 ,会自动提升为int。
发表于 2017-03-22 21:23:11 回复(0)
发表于 2022-10-13 14:25:29 回复(0)
line3到底是非运行时异常还是Error?
发表于 2022-05-10 16:31:35 回复(0)
<p>基本类型中,低级向高级是隐式(自动)转换,高级像低级需要强转</p>
发表于 2020-11-23 14:50:50 回复(0)
short类型转为byte类型出错
a1*a2结果默认为int类型,转为byte类型出错
高级向低级转换必须强制转换才可以。
发表于 2019-09-11 14:30:45 回复(0)
short转byte需要强制类型转换;
byte、char和short类型的算术运算首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果.
编辑于 2019-02-22 10:27:03 回复(0)