final小记

大家都知道final是java中的修饰符之一。
用来修饰类,方法或变量。
本文不讨论以上用法,至少讨论啥呢,请看以下代码:
public class Main{
	static void normalAdd(){
		byte b1=1,b2=1,b3;
//		b3=b1+b2;//这样写会导致编译无法通过,因为b1+b2会自动升格成int型,int必须被强转才能赋值给byte
		b3=(byte) (b1+b2);//这样写是正确的
	}
	static void finalAdd(){
		final byte b1=1,b2=1,b3;
		b3=b1+b2;//看,这里不出错了。因为b1和b2都为final型,不会提升数据类型。
	}
	static void finalAdd2(){
		final byte b1=127,b2=1,b3;
//		b3=b1+b2;//这样写依然会导致编译无法通过。虽然b1和b2都是final型,但是两数相加之后为128,超出了byte的范围。
		b3=(byte) (b1+b2);//所以此处依然要强转。
	}
}

结论:被fianl修饰的变量不会自动改变类型(越界情况特殊考虑)

猜你喜欢

转载自leozam.iteye.com/blog/2389097