Java数据类型转换题目

题目一

public static void main(String[] args) {
    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);
}
上述代码片段中,存在编译错误的语句是(ACD)
A语句1      B语句2     C语句3     D语句4    

剖析

  • 语句1错误:b3 = b1 + b2;
    b1,b2均为byte自动转int,b3作为byte类型无法接受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;原理同语句3,所以错误。同时大家要注意b7是final修饰,即只可赋值一次,便不可再改变。

本题主要是涉及到以下几个知识点

  1. 自动转型
  • 表示数范围小的数据类型可以自动转换为表示数范围大的数据类型;
  • 所有的byte,short,char型的值在操作时将被提升为int型
  1. final修饰的变量如何转型
  • 被final修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化

猜你喜欢

转载自www.cnblogs.com/zxfei/p/11042561.html