式の変換の注意事項、およびfinal修飾の変数はJVMによって最適化されます
871 ワード
1 javaでの式の移行に注意
例は次のとおりです.
A、出力結果:13、B、b 6=b 4+b 5コンパイルエラーC、b 3=b 1+b 2コンパイルエラーD、運転異常
まず、式の移行には、次のルールに注意してください.
①すべてのbyte,short,char型の値がint型に引き上げられる.
2操作数がlong型であれば、計算結果はlong型である.
3操作数がfloat型であれば、計算結果はfloat型である.
④操作数がdouble型の場合、計算結果はdouble型である.
まず2つのbyteタイプが加算され、自動的にintに昇格し、計算結果もintであるためbyteを強制的に変換する必要があるが、fianlで修飾された変数は変更されず、JVMで最適化され、2つのfinal修飾が加算されると左の変数のタイプに応じて変換され、この2つのfinal変数の最終タイプとなる.
次のコードに従います.
コンパイル実行はすべて通過し、finalintとfinal byteの加算は整形とbyte型でも可能で、強制変換は必要ありません.
例は次のとおりです.
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
A、出力結果:13、B、b 6=b 4+b 5コンパイルエラーC、b 3=b 1+b 2コンパイルエラーD、運転異常
まず、式の移行には、次のルールに注意してください.
①すべてのbyte,short,char型の値がint型に引き上げられる.
2操作数がlong型であれば、計算結果はlong型である.
3操作数がfloat型であれば、計算結果はfloat型である.
④操作数がdouble型の場合、計算結果はdouble型である.
まず2つのbyteタイプが加算され、自動的にintに昇格し、計算結果もintであるためbyteを強制的に変換する必要があるが、fianlで修飾された変数は変更されず、JVMで最適化され、2つのfinal修飾が加算されると左の変数のタイプに応じて変換され、この2つのfinal変数の最終タイプとなる.
次のコードに従います.
コンパイル実行はすべて通過し、finalintとfinal byteの加算は整形とbyte型でも可能で、強制変換は必要ありません.
public static void main(String[] args) {
final int a=2;
final byte a2=3;
int a3=a+a2;
byte a4=a+a2;
System.out.println(a4);
}
:http://www.bubuko.com/infodetail-1053430.html