下記プログラム(ソース1)を実行すると「1」という値が出力されます。しかし、2行目をprivate static int a;とすると「0」という値が出力されます。
オブジェクトは参照渡しで基本データ型は値渡しと思ったのですが、2行目の値をString型で行ったところ全く変更されていない値が出力されました。(ソース2)
一体どういうことでしょうか?
回答のほどよろしくお願い致します。
(ソース1)
public class X{
private static int a[] = new int[1];
public static void main(String []args){
modify(a);
System.out.println(a[0]);
}
public static void modify(int a[]){
a[0]++;
}
}
(ソース2)
public class X{
static String a = "a";
public static void main(String []args){
modify(a);
System.out.println(a);
}
public static void modify(String a){
a = "b";
}
}
No.2ベストアンサー
- 回答日時:
ソース1:
int a[] = new int[1]
で、newを使っていますよね。
つまり、オブジェクトたちと同じ。つまり、参照渡し。変更される。
int a
は、値渡し。つまり、変更不可。
ソース2:
modifyで
a = "b";
は、
char data[] = { 'b' };
a = new String(data);
のことなので。
mainでは
a -> "a"
modifyでは
a -> "b"(新しく、別な場所に生成)
となっています。
modifyから戻れば、a -> "a"になります。
modifyのaはローカルなので。
変更するには、オブジェクトaの中身を変えなければなりません。
つまり、生成済みのものを変更する必要があります。
この場合、新しくnewすることになるので、
元領域"a"は変更されません。
No.1
- 回答日時:
私自身、昔似たような質問をしました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=708770
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=708770
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
randomで
-
Javaでlog4jを使ってログ出力を...
-
変数を動的に利用するには?
-
System.exit()の値を取得したい
-
中カッコ{}だけの記述について
-
ArrayList でスタックを
-
Eclipseのパッケージについて
-
元旦からの経過日数を求めたい
-
JSP/Servletのパラメータの受け...
-
(1)を表示するには
-
プログラミングの問題です。大...
-
ソースの実行の順番
-
androidアプリが強制終了してし...
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
ダブルクォーテーションのrepla...
-
C言語のポインターに関する警告
-
C言語 重複しない4ケタの乱数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
Javaでlog4jを使ってログ出力を...
-
System.exit()の値を取得したい
-
NoSuchMethodErrorが解決できま...
-
コンストラクタの引数の中のnew?
-
初心者なので教えてほしいです。
-
javaのプログラミングで作るRPG...
-
JSP/Servletのパラメータの受け...
-
getactualmaximum
-
インタフェイス実装と抽象クラ...
-
javaのコンパイルエラーについ...
-
javaで特定の文字列から特定の...
-
C# DatagridviewにExcelシート...
-
Socketの接続のタイムアウトを...
-
【java】同ディレクトリ別ファ...
-
元旦からの経過日数を求めたい
-
DESを使用した暗号化/復号化処...
-
【正規表現】< と > に囲まれた...
おすすめ情報