
1.下列代码的输出结果是:()(单选)
public static void main(String[] args){
double money = 3.0;
money -= 2.9;
System.out.println(money);
}
A. 0.1
B. 0.099
C. 0
D.0.10000000000000009
答案:D
解析:2.9转换为二进制数时进行运算,会丢失精度
2.下列数据类型转换,必须进行强制类型转换的是:()
A.byte→int
B.short→long
C.float→double
D.int→char
答案:D
解析:数据类型转换:(反过来转换要强制转型,可能会丢失精度)
char→
byte→short→int→long→float→double
3.下列赋值语句中,正确的是:()
A.byte b1 = 10, b2 = 20; byte b=b1+b2;
B.byte b1 = 10, b2 = 20; byte b=b1+20;
C.byte b1 = 10, b2 = 20; byte b=b2+10;
D.byte b1 = 10; byte b=++b1;
答案:D
详解:两个字面量相加为char或者int
变量和字面量相加只能为int类型
变量和变量相加只能为int
byte 与 byte(或short、char)类型进行运算时会自动转换为int类型,两个int类型相加之后也是int类型,需强制转换为byte类型
拓展运算符(++,--,+=,-=,*=等)不改变数据类型,但可能会丢失精度
byte b = ++b1; 等价于 byte b =(byte)(b1+1);
4.(多选题)
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);
以上代码片段中,存在编辑错误的语句是()
A.语句1
B.语句2
C.语句3
D.语句4
答案:ACD
解析:语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2),或者将b3定义为int
语句2正确:b4,b5都为final类型,不会自动提升,所以和的类型视左边变量类型而定
语句3错误:虽然b4不会自动提升,但是b1仍会自动提升,所以结果一样需要强转,b8=(byte)(b1+b4)
语句4错误:同上。同时要注意b7为final修饰,只能被赋值一次,然后就不能再改变了
每日笔记:Java中,字符串在不同字符编码中字母和汉字占字节数情况:
①Unicode:字母 2 汉字 2 占位符 2
②GBK: 字母1 汉字2
③UTF-8:字母1 汉字3