用来修饰类,方法或变量。
本文不讨论以上用法,至少讨论啥呢,请看以下代码:
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修饰的变量不会自动改变类型(越界情况特殊考虑)