Java での配列の呼び出しは、デフォルトではアドレスによって呼び出されます。メイン メソッドでは、配列が特定のメソッドに渡され、メイン メソッドに戻るときに配列の特定の値が変更されます。配列が変更されたことがわかります。
テストコード:
public class ArrayTest { public static void main(String[] args){ Map[] maparray=new Map[3]; for (int i = 0; i < maparray.length; i++) { Map<String,String> map=new HashMap<String,String>(); map.put("a", i+"_ajkcz"); map.put("c", "werq_"+i); maparray[i]=map; } System.out.println("++++++++++++++++++++++++"); for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); System.out.println(key+"\t"+map.get(key) ); } } System.out.println("++++++++++++++++++++++++"); new ArrayCharge().printAndChangeArray(maparray); System.out.println("++++++++++++++++++++++++"); for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); System.out.println(key+"\t"+map.get(key) ); } } } } class ArrayCharge { public void printAndChangeArray(Map[] maparray){ for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; map.put("a",i+"________"); } for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); System.out.println(key+"\t"+map.get(key) ); } } } } 控制台输出结果: ++++++++++++++++++++++++ cwerq_0 a0_ajkcz cwerq_1 a1_ajkcz cwerq_2 a2_ajkcz ++++++++++++++++++++++++ cwerq_0 a0________ cwerq_1 a1________ cwerq_2 a2________ ++++++++++++++++++++++++ cwerq_0 a0________ cwerq_1 a1________ cwerq_2 a2________PHPでは、デフォルトでは、サブメソッド内の配列の変更は親メソッドでは検出できません
テストコード:
<?php $arraytest=array(); for($i=0;$i<3;$i++){ $child=array(); $child['keystr']='key'.$i; $child['valuestr']='value'.$i; $arraytest[]=$child; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); for($i=0;$i<count($arraytest);$i++){ $child=$arraytest[$i]; $child['valuestr']="_________".$i; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); ?>
Array ( [0] => Array ( [keystr] => key0 [valuestr] => value0 ) [1] => Array ( [keystr] => key1 [valuestr] => value1 ) [2] => Array ( [keystr] => key2 [valuestr] => value2 ) ) +++++++++++++++++++++++++ Array ( [0] => Array ( [keystr] => key0 [valuestr] => value0 ) [1] => Array ( [keystr] => key1 [valuestr] => value1 ) [2] => Array ( [keystr] => key2 [valuestr] => value2 ) ) +++++++++++++++++++++++++Java と同様に PHP の Word メソッドに配列パラメータを渡すことができ、Word メソッドの処理後に親メソッドの配列も変更されるようにしたい場合は、以下が必要ですパラメーターを渡すときに値の代わりに値を渡す場合、たとえば、p の値が 100、つまり $p=100 である場合、渡す必要があるパラメーターは「&」です。 $p"
テストコード:
<?php $arraytest=array(); for($i=0;$i<3;$i++){ $child=array(); $child['keystr']='key'.$i; $child['valuestr']='value'.$i; $arraytest[]=$child; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); for($i=0;$i<count($arraytest);$i++){ $child=&$arraytest[$i]; //注意这里加了一个指针符号,代表是传址调用 $child['valuestr']="_________".$i; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); ?>
Array ( [0] => Array ( [keystr] => key0 [valuestr] => value0 ) [1] => Array ( [keystr] => key1 [valuestr] => value1 ) [2] => Array ( [keystr] => key2 [valuestr] => value2 ) ) +++++++++++++++++++++++++ Array ( [0] => Array ( [keystr] => key0 [valuestr] => _________0 ) [1] => Array ( [keystr] => key1 [valuestr] => _________1 ) [2] => Array ( [keystr] => key2 [valuestr] => _________2 ) )