- 画出基本数据类型变量之间自动类型提升的运算规则图。
答:当容量小的数据类型和容量大的数据类型的变量做运算:
表示数据范围从小到大
byte,char,short →int→long→float→double
注:当byte,char,short三种类型的变量做运算时,结果为int型。
- 说明基本数据类型变量之间强制类型转换的使用规则和强转可能出现的问题。
答:使用规则:需要使用强转符:( ) 。在“()”中写入想要强制转换的类型。
可能出现的问题:可能导致精度损失。
- 判断是否能通过编译
- short s = 5; s = s-2; ?
- byte b = 3; b = b + 4; ?
b = (byte)(b+4); ?
3.char c = ‘a’; int i = 5; float d =0.314F; double result = c+i+d; ?
4.byte b = 5; short s = 3; short t = s + b; ?
答:1)题不能通过编译,因为在s=s-2时,无法从int转换到short类型。
2)题byte b = 3; b = b + 4;不能通过编译,原因和上一题一样,但是加上b = (byte)(b+4);可以通过编译,因为使用了强制转换。
3)题能通过编译。
4)题不能通过编译,因为byte,short做运算时,结果为int类型,所以在short t = s + b;会报错。
比较 + 与 +=
short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 += 1;有什么错
答:short s1 = 1; s1 = s1 + 1; s1+1运算时会自动转换成int类型,无法将int类型转换为short类型,我们知道 short 与int 类型 所占的空间不同,int类型所占的空间大于short ,因为害怕因为大转小导致数据丢失,这就导致 int转short 必须强制转换。
对于short s1=1;s1+=1;来说,+=是Java语言规定的运算符,Java会对它进行特殊处理—强制类型转化(short s1 = (short)(s1+1)),因此可以正确编译。