2 -13 : 異なる基本データ型同士の代入変換2(final変数だと!?)

異なる基本データ型同士の代入変換2

異なる基本データ型変数同士の代入変換(=)はその表現可能なサイズにより可能な場合とコンパイルエラーになる場合がある。
が、右辺が final 属性の場合はコンパイルが通るパターンがある。

byte fByte = 0;
short fShort = 0;
int fInt = 0;
char cha;
cha = fByte; // コンパイルエラー
cha = fShort; // コンパイルエラー
cha = fInt; // コンパイルエラー

の場合はコンパイルエラーだが、

final byte fByte = 0;
final short fShort = 0;
final int fInt = 0;
char cha;
cha = fByte; // コンパイルが通る!?
cha = fShort; // コンパイルが通る!?
cha = fInt; // コンパイルが通る!?

ではコンパイルエラーにならない。

全く調査していないため原因は不明。
実作業でありえるパターンとして、final 変数の final 属性を削除しただけでコンパイルエラーになってしまう場合がある、ということ。となるとむやみに final 属性は外せなくなってしまう。。。そこは正しい型変換で記述していれば問題ないが。

[StdDataCast2.java] (コンパイル不可)
/**
* 異なる基本データ型同士の代入変換(final変数だと!?) テストクラス
*/
public class StdDataCast2 {

public static void main(String[] args) {
// 代入用データ
final boolean fBoolean = false;
final char fChar = '0';
final byte fByte = 0;
final short fShort = 0;
final int fInt = 0;
final long fLong = 0L;
final float fFloat = 0F;
final double fDouble = 0.0;

// char <- 他基本データ型
char cha = '0';
cha = fBooelan; // コンパイルエラー
cha = fByte; // コンパイルが通る!?
cha = fShort; // コンパイルが通る!?
cha = fInt; // コンパイルが通る!?
cha = fLong; // コンパイルエラー
cha = fFloat; // コンパイルエラー
cha = fDouble; // コンパイルエラー
}

}