- ベストアンサー
Javaの型変換について初心者向けに説明
数日前からIT業界に転職をして、今Javaの勉強をしています。本当に初心者でテキストの意味がわからないところがあり、質問をさせていただきます。 テキストで異なる種類の型に代入しているコードがあるのですが、代入後の値の実行結果がなぜそうなるのかわかりません。 本当に初歩的な質問で申し訳ないのですが、どなたか噛み砕いて実行結果になるまでの経過を辿った説明をしていただけませんでしょうか。 ○異なる種類の型に代入しているコード public class Sample5_5 { public static void main(String[] args) { long longValue = 1; int intValue = 2; short shortValue = 3; byte byteValue = 4; System.out.println("最初の値"); System.out.println(longValue); System.out.println(intValue); System.out.println(shortValue); System.out.println(byteValue); longValue=intValue; intValue=shortValue; byteValue=(byte)shortValue; longValue=intValue; System.out.println("代入後の値"); System.out.println(longValue); System.out.println(intValue); System.out.println(shortValue); System.out.println(byteValue); ○実行結果 最初の値 1 2 3 4 代入後の値 3 3 3 3 この代入後の値がなぜ全て3になるのかわかりません。 宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>1:longValue=intValue; ←longValue=intValueなので2になる >では、実際の実行結果は変数は3になりますよね。 >実行結果までのさらに詳細な経緯は、 >2:intValue=shortValue;←intValue=shortValueのinntvalue >がここで3になったいるので、1:longValue=intValue;も変数は2ではなく最終的に3になるという認識でよろしいのでしょうか? そうです。 1:でlongValueの値が2になりますが、4:にてlongValue=intValueの値となるため最終的に3になります。(2:にてintValue=shortValueつまり3が代入されている)
その他の回答 (4)
- OKwebb
- ベストアンサー率44% (92/208)
あはは。 ちょっとマジ悩んでしまった。 # longValue が 2 になる longValue=intValue; # intValue が 3 になる intValue=shortValue; # byteValue が 3 になる byteValue=(byte)shortValue; # longValue が 3 になる longValue=intValue;
お礼
回答ありがとうございました。羅列している文を前後並び替えるだけではっきり見えてくるんですね。ありがとうございました。
- Hardking
- ベストアンサー率45% (73/160)
結論から言うと4ステップの代入文で 変数shortValueの値(3)をlongValue、intValue、byteValueに 代入する処理をしています。 デバッグを行うなら、各ステップ実行直後に4つの変数値を コンソール出力すれば、実行結果に納得されるはず。 例. longValue=intValue; System.out.println("STEP1 実行後"); System.out.println("longValue : "+ longValue + "intValue : "+ intValue + "shortValue : "+ shortValue + "byteValue : "+ byteValue); intValue=shortValue; System.out.println("STEP2 実行後"); System.out.println("longValue : "+ longValue + "intValue : "+ intValue + "shortValue : "+ shortValue + "byteValue : "+ byteValue); byteValue=(byte)shortValue; System.out.println("STEP3 実行後"); System.out.println("longValue : "+ longValue + "intValue : "+ intValue + "shortValue : "+ shortValue + "byteValue : "+ byteValue); longValue=intValue; System.out.println("STEP4 実行後"); System.out.println("longValue : "+ longValue + "intValue : "+ intValue + "shortValue : "+ shortValue + "byteValue : "+ byteValue);
お礼
回答ありがとうございました。理解できないときはコンソール出力をすると良いのですね、調べてみまて、今度またそうゆうことがあったときにはトライしてみます。ありがとうございました。
- ProKaseifu
- ベストアンサー率51% (98/192)
1箇所訂正 × 4:longValue=intValue;←longValue=intValueなので3になる(3:にてintValueの値は3になっている) ○ 4:longValue=intValue;←longValue=intValueなので3になる(2:にてintValueの値は3になっている)
- ProKaseifu
- ベストアンサー率51% (98/192)
long longValue = 1; int intValue = 2; short shortValue = 3; byte byteValue = 4; 1:longValue=intValue; ←longValue=intValueなので2になる 2:intValue=shortValue;←intValue=shortValueなので3になる 3:byteValue=(byte)shortValue;←byteValue=shortValueなので3になる 4:longValue=intValue;←longValue=intValueなので3になる(3:にてintValueの値は3になっている) 結果すべての変数は3となる。
補足
回答下さいましてありがとうございます。 上の説明の1.で一つお聞きしてもよろしいでしょうか。 1:longValue=intValue; ←longValue=intValueなので2になる では、実際の実行結果は変数は3になりますよね。 実行結果までのさらに詳細な経緯は、 2:intValue=shortValue;←intValue=shortValueのinntvalue がここで3になったいるので、1:longValue=intValue;も変数は2ではなく最終的に3になるという認識でよろしいのでしょうか?
お礼
度々ありがとうございました!!丁寧な説明で初心者にもわかりやすかったです。