• ベストアンサー

==演算子について

momozangeの回答

  • momozange
  • ベストアンサー率67% (21/31)
回答No.1

仰る通り 'wi1 == i' の結果はtrueです。 Integerであろうとintであろうと変数を宣言するという行為でJVM内に4byte分のアドレスが確保されるわけです。 今回の場合4byte範囲の数値がメモリの「どこか」に[00 00 01 2C」として確保されることになります。 宣言後、次回からはこれをロードできるようになるわけですから参照としては「同じもの」ということになり 条件文の結果はtrueです。

KGM
質問者

お礼

大変失礼しました。 wi1 == iの結果はtrueになります。 書き間違えをしてしまい申し訳ございません。 このスレの上に記載されている >>wi1 == wi2'がtrueにならないという意味 これは、wi1とwi2は独自にメモリを確保しているから 値は同じですが、値の参照先は違うということになります。 そのため、結果はfalseとなります。 とすると、 wi1 == i は、wi1やiでも独自のメモリを参照しているので、 falseになるという結果に繋がってしまいます。 まだ、イメージがつかめず苦労しています。

関連するQ&A

  • 書き換え

    以下のソースコード(*を使って二等辺三角形を表示するプログラム)をwhile文のかわりにdo-while文を使って書き換える方法が分かる方ぜひ教えてください。いろいろ試しましたがコンパイルできずに困っています↓ //Triangle2.java class Triangle2{ public static void main(String args[]){ try{ if(args.length !=1){ System.out.println("Please input single positive integer!"); } else if(Integer.parseInt(args[0])>0) { int n = Integer.parseInt(args[0]); int i=0; while(i < n){ int j=0; while (j <= i){ System.out.print("*"); j++; } System.out.println(); i++; } int m=n-1; while(m > 0){ int k=m; while(k > 0){ System.out.print("*"); k --; } System.out.println(); m --; } } else{ System.out.println("Please input single positive integer!"); } }catch(NumberFormatException e){ System.out.println("Please input single positive integer!"); } } }

  • intではなくStringで・・・

    こんなソースがあります。。 public class Check { public static void main(String[] args) { int i = Integer.parseInt(args[0]); if (i == 123) { System.out.println("あたり!"); } else if (i < 123) { System.out.println("はずれ!"); } else { System.out.println("おおはずれ!"); } } } これを、int型の文字を入力して判定させるのではなく、String型の文字で判定させたいのですが、 int i = Integer.parseInt(args[0]);をどう変えればいけるでしょうか? よろしくお願いします!

    • ベストアンサー
    • Java
  • プログラムの平均値の出し方。

    プログラムの平均値の出し方。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } } このプログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。

  • javaプログラミングの質問です。

    プログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } }

    • ベストアンサー
    • Java
  • 研修生です。

    class dentaku{ public static void main(String args[]){ int val1 = 0; int val2 = 0; String ope; int kekka; if (args.length != 3){ System.out.println("引数は3個入力して下さい"); System.exit(0); } try{ val1 = Integer.parseInt(args[0]); val2 = Integer.parseInt(args[2]); }catch(NumberFormatException e){ System.out.println("数値でない値が入力されています"); System.exit(0); } ope = args[1]; String opeStr[] = {"kake", "waru", "tasu", "hiku"}; boolean errFlag = true; for (int i = 0 ; i < 4 ; i++){ if (ope.equals(opeStr[i])){ errFlag = false; } } if (errFlag == true){ System.out.println("演算子は kake waru tasu hiku の4つです"); System.exit(0); } if (ope.equals("kake")){ kekka = val1 * val2; }else if (ope.equals("tasu")){ kekka = val1 + val2; }else if (ope.equals("hiku")){ kekka = val1 - val2; }else{ if (val2 == 0){ System.out.println("0で割ろうとしています。"); System.exit(0); } kekka = val1 / val2; } System.out.println("入力された式は " + val1 + " " + ope + " " + val2 + " です"); System.out.println("計算結果は " + kekka + " です"); } }  上記のプログラムを全行網羅するために、引数のパターンを洗い出して表にしたいのです。 どうすればいいのですか?

  • Java subSetメソッドについて

    連投になってしまい申しわけございません。 ocj-p目前でハッキリしない問題を詰めております。 subSetメソッドについて、2冊の書籍を調べたのですが 解説がどちらも違っていてハッキリしません。 例えば以下のコードについて public class A { public static void main(String[] args) { TreeSet<Integer> ts1 = new TreeSet<Integer>(); TreeSet<Integer> ts2 = new TreeSet<Integer>(); for(int i=106; i<113; i++) { if(i%2 == 0) ts1.add(i); } ts2 = (TreeSet)ts1.subSet(108, true, 111, true); ts1.add(129); System.out.println(ts1 + "" + ts2); } } 1冊目では参照型ではないという考え方でaddはts2には反映せず [106, 108, 110, 112, 129][108, 110] 2冊目では参照型であるためaddは相互には反映し [106, 108, 110, 112, 129][108, 110, 129] とあります。 どちらの考え方が正しいでしょうか? 私はずっと参照型ではない=1冊目と同じ考え方でした。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • boolean型

    class Bool {   static boolean b;   public static void main(String [] args) {     int x=0;     if (b ) {       x=1;     }     else if (b = false){       x=2;     }     else if (b){       x=3;     }     else {       x=4;     }     System.out.println("x = " + x);     System.out.println(b=false);   } } SUNのサイトにあった「どのような結果になるか」と言う問題なのですが、8行目の if(b=false) の部分がifの括弧の中はBoolean型じゃないといけないのに 代入してるからコンパイルエラーだなとおもったのですが あっさりコンパイルは通ってx=4と言う出力です・・・ (b=false) と言うのはどのようにコンパイルされているのですか?? なぜ 代入が、BooleanとしてOKなのでしょうか??

    • ベストアンサー
    • Java
  • java 素数判定

    入力した数字が整数か否かを判定するjavaプログラムを作っています。 以下の通りコンパイルして実行しました。これだと実行したときに どんな数字を数字を入力しても「31は素数です。 」となります。 入力した数字を判定させるにはどのようにしたらいいのでしょうか? class Sosuu { public static void main (String[] args) { int n = 31; boolean isPrime = true; for (int i = 2; i <= n - 1; i++) if (n % i == 0) { isPrime = false; break; } if (isPrime) System.out.println(n + " は素数です。"); else System.out.println(n + " は素数ではありません。"); } }

    • ベストアンサー
    • Java
  • Javaプログラムの間違いを見つけてください

    下記のプログラムをマニュアル通りに入力したのですが、おそらくマニュアルにミスがあったのでしょう。どこが間違っているのか教えてください。よろしくお願いしますm_ _m class kadai1710 { public static void main (String args []) { System.out.println(args[0]); if(Integer.parselnt(args[0]) == 1) System.out.println("男性"); else System.out.println("女性"); } }

    • ベストアンサー
    • Java
  • Integer クラスについて教えて下さい

     今晩は、java初心者です、宜しくお願いします。    Integerクラスについて下のように「i1 = new Integer("1");」と書いても「i2 = new Integer(1);」 と書いても、どちらも数字として認識されているようです。  正式な書き方としてはどちらなんでしょうか、宜しくお願いします。 ========================================================================= public class Test1 { public static void main(String[] args) { Integer i1 = new Integer("1"); System.out.println((i1+2)); Integer i2 = new Integer(1); System.out.println((i2+3)); } }

    • ベストアンサー
    • Java