首页 > 试题广场 >

关于下面代码片段叙述正确的是()

[单选题]
代码片段:
byte b1=1,b2=2,b3,b6;  
final byte b4=4,b5=6;  
b6=b4+b5;  
b3=(b1+b2);  
System.out.println(b3+b6);
关于上面代码片段叙述正确的是()
  • 输出结果:13
  • 语句:b6=b4+b5编译出错
  • 语句:b3=b1+b2编译出错
  • 运行期抛出异常
推荐
C.
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
编辑于 2015-12-02 19:45:52 回复(62)
没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
发表于 2015-08-14 15:28:14 回复(15)

表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。

①所有的byte,short,char型的值将被提升为int型;

②如果有一个操作数是long型,计算结果是long型;

③如果有一个操作数是float型,计算结果是float型;

④如果有一个操作数是double型,计算结果是double型;
而声明为final的变量会被JVM优化,第6行相当于 b6 = 10
若有不对,请指正

发表于 2015-08-13 14:14:49 回复(18)
第四行强制转换问题
发表于 2022-02-27 23:34:00 回复(0)
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,
发表于 2021-08-12 08:38:31 回复(0)
还有一种:
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
发表于 2017-08-05 16:39:23 回复(2)
b4 被定义为最终类型,不用进行强转就可以被byte类型接收,而byte默认被转换为int型,byte溢出,所以报错
发表于 2015-08-13 20:09:44 回复(1)
改为:b3=(byte)(b1+b2); 后,结果为:13

被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
发表于 2015-10-27 15:06:01 回复(3)
final byte b4=4,b5=6;
声明b4与b5为final常量,不可改变。b4+b5仍为两个byte类型相加。
byte b1=1,b2=2; b1+b2会自动升级为int类型。
int类型赋值给低级别的需要强制转换。
发表于 2015-11-30 21:59:32 回复(1)


1.需要强制转换(向下转型)。
2.没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,要向下转型。
发表于 2015-08-17 14:05:14 回复(1)
如果 finalbyteb4=127,b5=127; 
b6=b4+b5; // 也是编译不通过的

发表于 2015-12-02 15:12:27 回复(1)
改为b3=(byte) (b1+b2);就可以通过编译
发表于 2015-08-14 18:47:56 回复(0)
搬运工~
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
注:没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
发表于 2022-04-15 17:55:41 回复(0)
感谢前面各位大神,我来给配个图。
发表于 2017-11-20 10:55:11 回复(0)

表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。

①所有的byte,short,char型的值将被提升为int型;

②如果有一个操作数是long型,计算结果是long型;

③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
被final修饰的变量是常量,会被JVM优化,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
发表于 2017-03-14 15:41:47 回复(1)
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
发表于 2016-05-18 20:06:02 回复(0)
byte,short,char参与运算时,会自动提升为int,int附给byte无法自动转换,需要强转,编译报错
发表于 2023-01-17 18:25:29 回复(0)
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
发表于 2022-02-27 10:27:39 回复(0)
代码无法运行,很明显的提示了b3是byte类型,b1+b2俩个byte类型相加会类型提升为int,所以无法将俩数相加的int类型值赋值给byte类型


强转后运行没有问题
发表于 2021-07-27 16:39:12 回复(0)
发表于 2021-06-12 16:17:46 回复(0)
正确答案C.
翻车在B上,没有注意b4 b5有final修饰,以为会发生类型不匹配的错误。
1.所以得出,被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了,不存在类型的转化问题。
2.b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
3.Java中的byte,short,char进行计算时都会提升为int类型。
发表于 2019-09-16 16:46:05 回复(0)