Java中基本数据类型转换以及相关面试题

当数据类型不一样时,将会发生数据类型转换。

  • 数据类型转换分为两种:自动类型转换(隐式)强制数据类型转换(显式)

自动类型转换:
(1)代码不需要进行特殊处理,自动完成。
(2)规则:数据范围从小到大。

强制类型转换:
(1)代码需要进行特殊的格式处理,不能自动完成。
(2)格式:范围小的类型 范围小的变量 = (范围小的类型) 原本范围大的数据 eg: int num = (int)100L;

case1在这里插入图片描述

原因:

  1. 对于byte,short,char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。一旦右侧赋值数值超过了左侧的范围,那么编译器直接报错。

  2. 如果右侧的表达式含有变量,则需要手动强制类型转换。否则会报错。

eg:
package Test;

public class Test {

	public static void main(String[] args) {
    short a = 5;
    short b = 8;
    short result1 =(short)( a + b);
    
	}

}

case2

在这里插入图片描述

原因:在给变量赋值时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。编译之后得到的 . class字节码文件当中就相当于直接就是:short result2 = 13;右侧的常量结果数值没有超过左侧范围,所以正确。这称为“编译器的常量优化”。

面试题:
在这里插入图片描述

解析:显而易见,这道题考查到了基本数据类型转化和final关键字的使用这方面的知识。
从上面讲述的内容我们可以知道如果右侧的表达式含有变量,则需要手动强制类型转换。否则会报错。所以上面代码片段中语句 “ b3 = (b1 + b2) ; ”会出现编译出错。所以可知选项C正确。
那么你会不会好奇为什么语句“ b6 = b4 + b5 ;”不会发生编译错误呢?
因为b4 ,b5都是被final修饰的,我们都知道final在声明了变量之后,就不可以再改变该变量的值。即b4 , b5,的值分别始终都是byte类型的4,6。而b6就是byte类型的所以在“=”两边不存在数据类型不一致的问题,所以编译器不会报错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值