アプリ版:「スタンプのみでお礼する」機能のリリースについて

数日前から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になるのかわかりません。
宜しくお願いいたします。

A 回答 (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が代入されている)
    • good
    • 0
この回答へのお礼

度々ありがとうございました!!丁寧な説明で初心者にもわかりやすかったです。

お礼日時:2009/02/26 14:17

あはは。


ちょっとマジ悩んでしまった。
# longValue が 2 になる
longValue=intValue;
# intValue が 3 になる
intValue=shortValue;
# byteValue が 3 になる
byteValue=(byte)shortValue;
# longValue が 3 になる
longValue=intValue;
    • good
    • 0
この回答へのお礼

回答ありがとうございました。羅列している文を前後並び替えるだけではっきり見えてくるんですね。ありがとうございました。

お礼日時:2009/02/26 14:19

結論から言うと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);
    • good
    • 0
この回答へのお礼

回答ありがとうございました。理解できないときはコンソール出力をすると良いのですね、調べてみまて、今度またそうゆうことがあったときにはトライしてみます。ありがとうございました。

お礼日時:2009/02/26 14:25

1箇所訂正



×
4:longValue=intValue;←longValue=intValueなので3になる(3:にてintValueの値は3になっている)


4:longValue=intValue;←longValue=intValueなので3になる(2:にてintValueの値は3になっている)
    • good
    • 0

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になるという認識でよろしいのでしょうか?

補足日時:2009/02/26 12:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!