- 締切済み
文字の表示
オブジェクトを受け取るメソッド ↓は引数にString型のオブジェクトを指定するプログラムです public class Sample { public static void main(String args[]) { String str = "abcd"; change(str); System.out.println(str); } private static void change(String str) { str = "efgh"; } } 私の中ではefghがでると思っていたんですが・・ これを実行してみると変数strに最初に代入した文字列が表示されるんです! なぜですか? できれば理由を教えてください 回答よろしくお願いします
- withAnchorPro
- お礼率72% (8/11)
- その他(趣味・娯楽・エンターテイメント)
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- queuerev2
- ベストアンサー率78% (96/122)
何のプログラミング言語でしょうか? Javaでしょうか? それなら、[技術者向] コンピューター > プログラミング > Java のカテゴリに質問を出せばすぐに回答が付くことでしょう。 とはいえ答えられそうで回答のついていない質問を見つけてしまったので一応回答させていただきます。 (もっとも私はJavaがわからないので不正確かもしれませんが・・・) 参考URLによると、Javaでは引数は値渡しとのこと。なのでchangeで引数の値を変えても呼び出し元のmainには影響しないと思われます。
関連するQ&A
- 以下のコードのどこが問題なのでしょうか?
java初心者です。よろしくお願いいたします。以下のコードはどこに問題があるのでしょうか?よろしくお願いいたします。 public class Sample2 { public static void main(String[] args1,String[] args2) { MyObject object = new MyObject(); object.setName("mikel" , "jun"); String s = object.getName(); System.out.println(s); } } class MyObject { String name; public void setName(String str1,String str2) { name = "str1"+"str2"; } public String getName() { return name; } }
- ベストアンサー
- Java
- オブジェクトの参照渡しについて
メソッドの引数にオブジェクトを指定した場合、 それは「参照渡し」だと理解していました。 でも以下のプログラムでは、指定したオブジェクトに変化がありません。 public static void main(String[] args) { BigDecimal b = new BigDecimal(1); System.out.println(b); test(b); System.out.println(b); } public static void test(BigDecimal b) { b = new BigDecimal(2); } 出力は以下です。 ------------------------- 1 1 ------------------------- どういうことでしょうか? 正しい知識をお教えください。 よろしくお願いします。
- ベストアンサー
- Java
- javaの問題です。
現在以下のようにプログラムを書いてみました。 public class Replace { public static void main(String[] args) { String str = args[0]; int num = str.indexOf(args[1]); while (num != -1){ str = ( str.substring(0, num) + args[2] + str.substring(num + args[1].length()) ); num = str.indexOf(args[1]); } System.out.println(str); } } 第一引数に第二引数が含まれていれば、それを第三引数に置換する、というものです。 上記にて第二引数が単体ならば動作するのですが、たとえば 第一引数:ABCBA 第二引数:AB 第三引数:C という風に第二引数を複数にすると、 結果がCCBAと後半のBAが変換されなくなってしまいました。 後半部分もAとBが含まれる、ということで、同じように変換出来るようにしたいのですがどのようにすればよいのでしょうか?;; どうぞよろしくお願いいたします;;
- ベストアンサー
- Java
- Javaの参照渡し
以下のようなプログラムで望むような結果(下に書いてある実行結果)は得られるでしょうか。 class HelloWorld { public static void main(String[] args) { String str; makeString1(str); System.out.println(str); makeString2(str); System.out.println(str); } public static void makeString1(String str) { String words = "HelloWorld!"; str = words; } public static void makeString2(String str) { str = "HelloWorld!!"; } } ---実行結果--- HelloWorld! HelloWorld!!
- ベストアンサー
- Java
- Javaについて教えてください!
OyaクラスのメインメソッドからKoクラス内のメソッドを呼び出して文字列の出力を行いたいのですが、今のままではエラーが出てコンパイル出来ません。どこが間違っているか教えてください!ちなみにエクリプスでの実行には問題はありません。 public class Ko{ public static void ko(){ String str = "KO"; System.out.println(str); }} public class Oya{ public static void main(String[] args){ Ko.ko(); }}
- ベストアンサー
- Java
- javaの質問です 合ってるかをお願いします
間違ってる場合は何が正解かを教えてください。 よろしくお願いします 1 変数strには何が入っているか test 2 dataとstrの関係 わからないです。 public class Example5 { public static void main( String[] args ) { String data = "test."; hyouji( data ); } static void hyouji( String str ) { System.out.println( str ); } }
- ベストアンサー
- Java
- Javaでメソッドの引数にメソッド
以下のようにメソッドの引数にメソッドを渡したいです。 static void methodA(methodB, str) { methodB(str); } static void methodB(str) { System.out.println(str); } つまりメソッドAにメソッド名「methodB」と文字列「str」を渡して、間接的にメソッドBを実行させたいということです。 getMethodやinvokeを使うのかなとは思ったのですが、よく理解できませんでした。 上記のようなことは可能でしょうか?
- ベストアンサー
- Java
- インターフェイス実装クラスの表示について
/* インタフェースPlanetを実装したクラスEarth、Marsがあります。 以下の実行結果になるようにクラスAggregateへshowメソッドを 追加してください。 [実行結果] 地球 太陽系にある惑星の1つで、太陽から3番目に近い。・・・ 火星 太陽系の太陽に近い方から4番目の惑星である。・・・ */ // [Planet.java] // 実装したいPlanetクラス interface Planet { public String getName(); public String getOutline(); } // Planetを実装したEarthクラス // [Earth.java] class Earth implements Planet { private final String name="地球"; // getNameメソッド:戻り値String、引数無し public String getName(){ return name; } // getOutlineメソッド:戻り値String、引数無し public String getOutline(){ return "太陽系にある惑星の1つで、太陽から3番目に近い。・・・"; } } // Planetを実装したMarsクラス // [Mars.java] class Mars implements Planet { private final String name="火星"; // getNameメソッド:戻り値String、引数無し public String getName(){ return name; } // getOutlineメソッド:戻り値String、引数無し public String getOutline(){ return "太陽系の太陽に近い方から4番目の惑星である。・・・"; } } // メインクラス // [Main.java] class Main{ public static void main(String[] args){ // Earth&Marsクラスのインスタンス化 Earth earth = new Earth(); Mars mars = new Mars(); // Aggregateクラスのインスタンス化 Aggregate aggregation = new Aggregate(); // showメソッド呼び出し:戻り値無し、引数earth・mars aggregation.show(earth); aggregation.show(mars); } } // [Aggregate.java] class Aggregate { // ここにshowメソッドを追加 public void show(Earth planet){ System.out.println(); } public void show(Mars planet){ System.out.println(); } } showメソッドに引数としてEarth planet,Mars planetを渡すというところまでは理解しています。後は星の名前と概要を表示するのですが、例えば、 showメソッド内 // ここにshowメソッドを追加 public void show(Earth planet){ String str = earth.getName(); System.out.println(str); } public void show(Mars planet){ String str2 = mars.getOutline(); System.out.println(str2); } } とすると、erathとmarsの部分が「シンボルがありません」のエラーになります。自分の認識としては、EarthクラスとMarsクラスでフィールド変数を宣言しているので使えるのでは?と思っていたのですが、全然違うようです。どなたかどちらかのコード例を表記して頂けないでしょうか?よろしくお願い致します。
- ベストアンサー
- Java
- javaの質問です。
JAVAの質問です。 (replaceを使わない置換) java あいういあ あ !! > !!いうい!! 上のように、引数1に引数2の文字が含まれていればその文字を引数3に置き換えるという問題を解いているのですが、思うようにいきません。引数2が1文字なら簡単なのですが、2文字・3文字の場合が全く分かりません。また、replace系も使うことはできません(replacefirstなど)。 コード例を挙げて頂けないでしょうか? 丸投げなのは重々承知しておりますが、どうかよろしくお願い致します。 class Replace{ public static void main(String args[]){ String str=args[0]; int num = str.indexOf(args[1]); while(num != -1){ str=(str.substring(0,num)+args[2]+str.substring(num+1)); System.out.print(str); } System.out.println(); } } 一応こんな感じかな?と思ってコードを作ってはいるのですが、結果としては散々です。。。
- ベストアンサー
- Java
- 【Java】複数の引数の数値と文字列の判定
Javaについてです。 コマンドライン引数を複数渡し、渡ってきた値が数字のみの場合は、数値*数値の文字数を出力し 数字のみでない場合は文字列を逆から1文字ずつ出力する。 数値の判定はtry/catchで行い、catchメソッドには「stringFlg = true;」のみにする。 というプログラムを作りたいのですが、 引数が1つの時は上手くいくのですが、11 2あ あ3 44を渡した場合、 22 あ 2 3 あ 88 と出るはずが、 22 1 1 あ 2 3 あ 4 4 と出てしまいます…。 どうしたら全ての引数を正しく表示出来るのでしょうか?教えて下さい。 現時点のソースコードです。 public class Test { public static void main(String[] args) { boolean stringFlg = false; try { if(StringUtils.isNumeric(args[0])){ for(String arg : args) { int num = Integer.parseInt(arg); System.out.println(num * arg.length()); } } else{ stringFlg = true; } } catch (NumberFormatException e) { stringFlg = true; } if(stringFlg){ for(String val : args) { String[] str = val.split(""); for(int i = str.length-1; i >= 0; i--){ System.out.println(str[i]); } } } } }
- ベストアンサー
- Java
お礼
Javaです! なるほどぉ・・ わざわざ回答ありがとうございます!! 勉強になりました