また、明示的に数値に型を持たせることができます。例を書くとこんな感じ。
byte b = 100;
int i = 100;
int ii = 100L;// 明示的に型指定するのでコンパイルエラー
long l = 100;
double d = 100;
int i = 100;
int ii = 100L;// 明示的に型指定するのでコンパイルエラー
long l = 100;
double d = 100;
また、3項演算子という構文があります。これはif文と代入を組み合わせたような構文になります。
int foo = 0;
foo = foo == 0 ? 100 : 0; //コンパイルOK
byte bar = 0;
bar = bar == 0 ? 100 : 0; //コンパイルNG
long hoge = 0;
hoge = hoge == 0 ? 100 : 0; //コンパイルOK
foo = foo == 0 ? 100 : 0; //コンパイルOK
byte bar = 0;
bar = bar == 0 ? 100 : 0; //コンパイルNG
long hoge = 0;
hoge = hoge == 0 ? 100 : 0; //コンパイルOK
暗黙の型変換で、barもコンパイルが通るような気がします。気になったので、イミディエイトで以下を実行してみました。
(foo == 0 ? 100 : 0).GetType()
すると、型はSystem.Int32でした。
ということで値の桁落しないlongはそのまま値が設定可能で、オーバーフローするbyte型はキャストしないと問題が発生する可能性があるということで、コンパイラーが教えてくれるってことなんでしょう。。。
0 件のコメント:
コメントを投稿