关于被final修饰的基本数据类型一些注意事项

本文探讨了涉及final修饰的基本数据类型在运算时的转换规则。内容包括:1) byte,short,char提升为int;2) 长度提升规则;3) 被final修饰的变量不会自动改变类型。特别指出,当两个final修饰的变量操作时,结果类型取决于左侧变量,且须确保结果在允许范围内,否则可能导致错误。" 105819880,8364623,程序编码与结构化设计原则,"['编程语言', '软件工程', '程序设计', '结构化设计', '代码规范']
今天看到网上有网友问到关于final修饰的面试题目,题目如下:
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);

问题是:上面哪条语句运算会出错呢?

其实,这个题目主要考察的就是基本数据类型转换的问题,主要涉及到以下几个知识点:

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修饰,则结果必须为同级别或者高一级别,eg:

	final byte a1=1,b1=1,c1=1,b11;
		final char a2='a',b2='a',c2='a',b22;
		final short a3=3,b3=3,c3=3,b33;
		final int a4=4,b4=4,c4=4,b44;
		final long a5=5,b5=5,c5=5,b55;
		final float a6=6,b6=6,c6=6,b66;
		final double a7=7,b7=7,a8=8,b77;
		
		//等号右边,被final修饰的为byte,short,char,int中的任何一种;等号左边可以为byte、short、char、int、long、float、double中的任何一种都不会出错
		b11=a1+a2;
		b11=a2+a3;
		b22=a2+a3;
		b33=a4+a3;
		b44=a2+a3;
		b55=a2+a3;
		b66=a2+a3;
		b77=a2+a3;
		
		//等号右边,被final修饰的为long、float、double中的任何一种;等号左边类型必须等于或者高于等号右边类型才不会出错,否则出错。 
		b11=a4+a5;   //编译时出错
		b22=a5+a5;   //编译时出错
		b33=a5+a5;   //编译时出错
		b44=a5+a5;   //编译时出错
		b55=a6+a6;   //编译时出错
		b66=a5+a6;
		b77=a7+a2;


有不正确的地方希望大家留言指出来。


评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值