首页 > 试题广场 >

下列代码片段中,存在编辑错误的语句是()

[不定项选择题]




byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7; b3=(b1+b2);  /*语句1*/ b6=b4+b5;    /*语句2*/ b8=(b1+b4);  /*语句3*/ b7=(b2+b5);  /*语句4*/ System.out.println(b3+b6);
下列代码片段中,存在编译错误的语句是()
  • 语句2
  • 语句1
  • 语句3
  • 语句4
推荐
本题答案应为:B、C、D
------------知识点------------
Java表达式转型规则由低到高转换
1、所有的byte,short,char型的值将被提升为int型;

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

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

4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
--------------解析--------------
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变
编辑于 2016-11-23 23:36:36 回复(86)
B、C、D
一、关于final的重要知识点;
1、final关键字可以用于成员变量、本地变量、方法以及类。
2、 final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
3、 你不能够对final变量再次赋值。
4、 本地变量必须在声明时赋值。
5、 在匿名类中所有变量都必须是final变量。
6、 final方法不能被重写。
7、 final类不能被继承。
8、 没有在声明时初始化final变量的称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。
二、数据类型转换
当使用 +、-、*、/、%、运算操作是,遵循如下规则:
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型,如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型,如果两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型,否则(操作数为:byte、short、int 、char),两个数都会被转换成int类型,并且结果也是int类型。
语句 1  :(b1 + b2) 被转换为int类型 但是 b3仍为 byte ,所以出错 要么将b3转化为int 要么将(b1 + b2) 强制转换为byte类型。所以语句1错误。
语句 2:b4 、b5被声明final 所以类型是不会转换, 计算结果任然是byte  ,所以 语句2正确。
语句 3:(b1 + b4)  结果仍然转换成int  所以语句 3 错误。
语句 4 : (b2 + b5)  结果仍然转换为int , 所以语句4错误。

编辑于 2017-08-26 17:41:54 回复(32)
长话短说

Java中的byte,short,char进行计算时都会提升为int类型。所以1,3,4得到一个int类型赋值给byte就不行。但是final修饰后byte不会转换成int计算,所以2得到的值还是byte

发表于 2021-12-09 11:25:37 回复(7)
这是C++?
发表于 2016-04-28 23:47:16 回复(12)
网友Pandora
本题答案应为:B、C、D
------------知识点------------
Java表达式转型规则由低到高转换
1、所有的byte,short,char型的值将被提升为int型;

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

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

4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
--------------解析--------------
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变
发表于 2016-09-04 12:21:45 回复(2)
答案为:B、C、D
发表于 2016-05-03 21:37:27 回复(6)
基本数据类型的操作
做这一题需要知道两个知识点:
    1所有的byte,short,char类型的值在原酸的时候会被提升为int类型
    2 被final修饰的变量不会自动的改变类型,当两个final修饰的变量操作时,结果会根据左边变量的类型而转换
发表于 2018-10-29 22:09:29 回复(0)
b3=(b1+b2)为什么会不对
因为b1、b2都是变量,所以在计算的时候,先提升类型,即int类型,然后相加,结果就是int类型的了,所以b3=(b1+b2)就不对了
发表于 2017-03-28 21:02:39 回复(1)
byte 类型在计算时,会自动转型为int类型,final修饰的byte类型不变,所以两个final类型相加类型不变。
发表于 2018-04-27 14:32:36 回复(2)
成功避开了所有正确答案
发表于 2017-09-04 15:21:38 回复(5)
------------知识点------------
Java表达式转型规则由低到高转换
1、所有的byte,short,char型的值将被提升为int型;

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

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

4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
--------------解析--------------
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变
发表于 2018-12-19 18:29:43 回复(1)
链接:https://www.nowcoder.com/questionTerminal/15b1429e6c364c3bbe6e8134a519f2a3
来源:牛客网

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

2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
最需要注意的是第五点,被final修饰的,这句话看似简单,但其实包含的有2种情况:
1)被final修饰的为byte,short,char,int中的任何一种,则运算之后,得到的类型可以是byte、short、char、int、long、float、double中的任何一种都不会出错;(前提是计算结果不能超出左边的取值范围,比如两个a都是char但是相加结果是194,超出了byte范围,所以结果不能是byte)

2)如果运算中有被final long 或者 final float 或者 final double修饰,则结果必须为同级别或者高一级别

//(复制转发)
//顶一下这个更为准确的解释,关于第五点高赞回答不够详细,还可以细分的

编辑于 2021-09-11 11:38:26 回复(0)
选成了ACD的请点右上角
发表于 2017-08-21 20:17:50 回复(0)
尴尬,A选项和B选项的内容,不按套路走啊
发表于 2017-10-15 12:42:35 回复(0)
本题答案应为:B、C、D
------------知识点------------
Java表达式转型规则由低到高转换
1、所有的byte,short,char型的值将被提升为int型;

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

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

4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
--------------解析--------------
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变
发表于 2022-07-25 20:06:02 回复(1)
134 byte 的计算都会转为int 类型
2 是final 修饰的变量计算,不会转为int类型
发表于 2022-04-17 20:16:48 回复(0)
final修饰的变量,类型不会自动提升
发表于 2021-12-02 00:47:47 回复(0)
被final修饰的不会提升
发表于 2018-01-02 16:54:13 回复(0)
自动类型转换。
byte,short,char型的值将被提升为int型;
被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
发表于 2017-09-30 14:20:42 回复(0)
本题答案应为:B、C、D ------------知识点------------ Java表达式转型规则由低到高转换: 1、所有的byte,short,char型的值将被提升为int型; 2、如果有一个操作数是long型,计算结果是long型; 3、如果有一个操作数是float型,计算结果是float型; 4、如果有一个操作数是double型,计算结果是double型; 5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。 --------------解析-------------- 语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int; 语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型; 语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4); 语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。
发表于 2016-11-14 17:34:27 回复(1)
final变量进行算术运算,不会进行类型转换
发表于 2022-07-19 11:23:05 回复(0)