Java初心者のための型変換の解説

このQ&Aのポイント
  • Java初心者でも理解できるように、型変換の仕組みを解説します。
  • コードの実行結果を元に、代入後の値がなぜ同じ値になるのかを解説します。
  • さらに、代入元と代入先のデータ型の関係も解説し、プログラミングの基礎を固めましょう。
回答を見る
  • ベストアンサー

Java初心者です。宜しくお願い申し上げます。

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 ------------------ (program exited with code: 0) Press return to continue 代入後の値が何故 3 3 3 3 となるか解りません。 どなたか解説してもらえませんか? ご多忙中恐縮です。 ご回答の程宜しくお願い申し上げます。

  • Java
  • 回答数3
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

longValue=intValue; System.out.println("代入中の値1"); System.out.println(longValue); System.out.println(intValue); System.out.println(shortValue); System.out.println(byteValue); intValue=shortValue; System.out.println("代入中の値2"); System.out.println(longValue); System.out.println(intValue); System.out.println(shortValue); System.out.println(byteValue); byteValue=(byte)shortValue; System.out.println("代入中の値3"); System.out.println(longValue); System.out.println(intValue); System.out.println(shortValue); System.out.println(byteValue); longValue=intValue; 途中をこのようにしてみてください。 何をしているかわかります。

jump7799
質問者

お礼

私の悪い癖で少し考えれば解るものを OKWAVEに丸投げにしていました。 このような事が無いようにします。 折角、ご回答くださったのにすみませんでした。

その他の回答 (2)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

変数宣言のときに代入した値 long longValue=1; int intValue=2; short shortValue=3; byte byteValue=4; 代入の結果では次のようになる longValue=intValue; → longValue=2; intValue=shortValue; → intValue=3; byteValue=(byte)shortValue; → byteValue=(byte)3; longValue=intValue; → longValue=3; 2番目にintValueへshortValueの3を代入しているので最初にlongValueへ代入した値は最後に代入したintValueの3に入れ替わります。 従って、System.out.printlnで出力している変数はすべて3が代入されているはずです。 初期値を他の値に置き換えた(代入した)ことを忘れないようにしてください。

jump7799
質問者

お礼

私の悪い癖で少し考えれば解るものを OKWAVEに丸投げにしていました。 このような事が無いようにします。 折角、ご回答くださったのにすみませんでした。

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.2

>longValue=intValue; >intValue=shortValue; >byteValue=(byte)shortValue; >longValue=intValue; 順に実行されたとき、そろぞれの行でlongValue,intValue,byteValueの値に何が入っているのか、よく考えればいいことです。

jump7799
質問者

お礼

私の悪い癖で少し考えれば解るものを OKWAVEに丸投げにしていました。 このような事が無いようにします。 折角、ご回答くださったのにすみませんでした。

関連するQ&A

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

    • ベストアンサー
    • Java
  • 7行目から13行目までエラー。何故でしょう。

    いつもありがとうございます。 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); } } いつもお世話になっております。 上記のJAVAの件。 7行目から13行目までエラーの記号が付きます。 何故でしょうか? 解説のほど,宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • java 初心者ですが・・・・

    教えてください。 次のプログラムの出力は「2」になるんですがイマイチ解釈できません。 分かりやすい説明などあればご教授願います。 class NarrowingConversion{ public static void main (String[] args){ byte b; int i = 258; b = (byte)i; System.out.println(b); } } よろしくお願いいたします。

    • ベストアンサー
    • Java
  • switch で疑問。java超初心者です。

    まず、 public class P1{   public static void main(String[] args){     int n = 1;       switch(n){         case 0:           System.out.println("あ");           break;         case 1:           System.out.println("い");           break;         case 2:           System.out.println("う");           break;         default:           System.out.println("え");       }   } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{   public static void main(String[] args){     int n = 1;     String s;       switch(n){         case 0:           s="あ";           break;         case 1:           s="い";           break;         case 2:           s="う";           break;         default:           s="え";       }       System.out.println(s);   } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。     System.out.print(s);                ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • java初心者なのですが

    java初心者なのですが クラスの配列を使用して配列の配列を作りたいのですが class B { double a[]; } class A{ public static void main(String[] args){ B[] a =new B[3]; for(int i=0;i<3;i++){ a[i]=new B(); } a[0].a[0]=3;         ・・ここでエラー a[0].a[50]=9; a[0].a[100]=100; a[1].a[200]=150; a[2].a[300]=250; System.out.println("a[0].a[0]="+a[0].a[0]); System.out.println("a[0].a[50]="+a[0].a[50]); System.out.println("a[0].a[100]="+a[0].a[100]); System.out.println("a[1].a[200]="+a[0].a[200]); System.out.println("a[2].a[300]="+a[1].a[300]); } } ここでエラーと書いたところでjava.lang.NullPointerExceptionというエラーが出ます。 何が間違えているのでしょうか?どうのようにすればエラーがなくなるのか教えてください。

    • ベストアンサー
    • Java
  • VScode Java 文字化け。

    public static void main(String[] args){ if(args.length<3){ System.out.println("引数が足りません"); }else{ System.out.println(args[0]); //1番目の引数 System.out.println(args[1]); //2番目の引数 System.out.println(args[2]); //3番目の引数 } } } C:\Java>javac ArgsTestB.java C:\Java>java ArgsTestB 蠑墓焚縺瑚カウ繧翫∪縺帙s 実行が文字化けします。 何故でしょうか? ご多忙のところ恐れ入ります。 ご回答お待ち申し上げております。 ご回答 Windowsのコマンド・プロンプトのデフォルト・エンコードはShift_JIS系のCP932(Windows-31J)です、UTF-8を使うと文字化けします、Shift_JIS系のCP932(Windows-31J)でセーブして下さい。 VScodeでやっているのですが、CP932(Windows-31J)がエンコードで 見つかりません。 shiftjisでやると文字化けします。 どうしたら文字化けしないでしょうか・・・? ご多忙のところ恐れ入ります。 ご回答お待ち申し上げております。

    • ベストアンサー
    • Java
  • Java何故エラーになるのですか?

    public class Sample3_1 { public static void notMain(String[] args) { System.out.println("not main"); } public static void main (String[] args) { System.out.println("こんにちは、Java"); System.out.println("私の名前は、コウゾウです。"); } } Exception in thread "main" java.lang.Error: Unresolved compilation problems: トークン "Invalid Character" に構文エラーがあります。このトークンを削除してください 構文エラーがあります。"}" を挿入して ClassBody を完了してください at Sample3_1.main(Sample3_1.java:10) "}" を挿入して」と書かれてますが、 "}" には間違いなさそうです。 どなたか解説のほどを宜しくお願い致します。

    • ベストアンサー
    • Java
  • JAVA初心者です。

    以下の文法でコンパイルエラーが出ます。 添削をお願いします。 import java.util.Random; public class Test{ public static void main(String[] args){ int n; for (n = 0; n < 200; n++){ int i; for (i = 0; i < 38; i++) { Random rnd = new Random(); int ran = rnd.nextInt(10); System.out.print(ran); System.out.print(" "); for (t = 0; t < 200; t++) } System.out.println(); } } }

    • ベストアンサー
    • Java
  • java初心者です。

    java初心者です。 イクリプスを使って、以下文のようなプログラムを実行しようとしたのですが、何度も「エディターにはメイン型が含まれていません」という画面が出てきて実行してくれません。 分かりやすい解決策をお待ちしています。よろしくおねがいします。 1class Sample1 2{ 3public static void main(String args[]) 4{ 5int num1=2; 6int num2=3; 7int sum =num1+num2 8 9System.out.prtintln("変数num1の値は"+num1+"です。"); 10System.out.prtintln("変数num2の値は"+num2+"です。"); 11System.out.prtintln("num1+num2の値は"+sum+"です。"); 12 13num1= num1+1; 14 15System.out.prtintln("変数num1の値に1をたすと"+num1+"です。"); 16} 17} 以上

  • Java初心者です

    次のようなプログラムを作りました interface Vehicle{ void drive(); } abstract class Animal{ abstract void show(); } class Lion extends Animal{ public void show(){ System.out.println("ライオンです"); } } class Horse extends Animal implements Vehicle{ public void show(){ System.out.println("馬です"); } public void drive(){ System.out.println("乗り物として使えます"); } } class Elephant extends Animal implements Vehicle{ public void show(){ System.out.println("象です"); } public void drive(){ System.out.println("乗り物として使えます"); } } class Bear extends Animal{ public void show(){ System.out.println("熊です"); } } class twentyeight{ public static void main(String args[]){ Animal an[]; an = new Animal[4]; an[0] = new Lion(); an[1] = new Horse(); an[2] = new Elephant(); an[3] = new Bear(); for(int i = 0;i < an.length;i++){ if(an[i] instanceof Vehicle){ an[i].drive();//ここにエラーが出る } else{ an[i].show(); } } } } インターフェイスを実装しているオブジェクトを判別し、そのdriveメソッドの呼び出しをしたいのですができません、どなたか教えてください。

    • ベストアンサー
    • Java