- PR -

req.getParameters("パラメーター名")で取得した値の操作に関して

投稿者投稿内容
MINE
会議室デビュー日: 2003/07/02
投稿数: 17
投稿日時: 2004-08-27 14:58
引用:

自分なりに、値渡しか、ポインタ渡しの違いと理解するようにします。
 違います?



Stringもオブジェクトへの参照であるので、以下の
変数a, b はともに同じオブジェクトの参照を持っています。

String a = "@";
String b = a;

しかし、Stringはデータの変更は許されていないので、
たとえば、以下のばあい、新しい"@IT"という内容の
Stringオブジェクトが生成されその参照が変数aに格納されます。

a = a + "IT";

また、以下の場合、メソッド内で新しいStringオブジェクトが
作成され、参照が戻り値として戻されます。

a = a.concat("IT");

このため、Stringは変更したように見えても実は新しいオブジェクト
を作成しているため、元のオブジェクトの内容は変更されていないので
変数bの値は"@"のままとなります。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2004-08-27 15:08
さっき書き忘れましたが、こうすれば別々になります。
コード:
String[] w = req.getParameterValues("_hoge");

String[] wk1 = new String[w.length]; //new をすることで別のString配列を作る
System.arraycopy(w, 0, wk1, 0, wk1.length); //配列の中身を一つずつdeepコピー

String[] wk2 = new String[w.length];
System.arraycopy(w, 0, wk2, 0, wk2.length);
//この時点で w!=wk1 && w!=wk2 && wk1!=wk2 になっています。



今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2004-08-27 15:33
Cっぽく説明?すると
String変数はポインタ変数で、String配列はポインタ配列・・・って感じです。

wk1とwk2は同じポインタ配列を見ていて、
0番目の要素の指す先を"wk1[0] = 〜"で変えてしまったので、
wk1[0]とwk2[0]が同じになってしまっていた。

って感じで分かりますでしょうか?(^^;
(I○サプリみたいに"すっきり"花が咲くことを期待)

スキルアップ/キャリアアップ(JOB@IT)