我想將一個數組傳遞給一個方法,但我知道數組是通過引用傳遞的,所以原始數組會被修改。我發現的一項工作是在該方法內部創建數組副本,然後修改副本,但傳遞數組副本的最佳方式是什麼,或者最好在方法內部創建副本。這裏是我的代碼 看看相反的方法ArrayUtils類什麼是在java中傳遞數組的最佳方式
package com.javablackbelt.utils;
import java.util.ArrayList;
import java.util.Arrays;
public class ListUtils {
public static void main(String arg[]) {
String[] arr = {"one", "two", "three", "four", "five"};
ArrayUtils.print(arr);
System.out.println();
String [] reversedArr = ArrayUtils.reverse(arr);
ArrayUtils.print(reversedArr);
System.out.println();
ArrayList<String> list = ArrayUtils.toArrayList(arr);
ListUtils.print(list);
}
public static void print(ArrayList<String> aStr) {
System.out.print("list: [ ");
for(String l: aStr)
System.out.print(l+" ");
System.out.println(" ] size: "+aStr.size());
}
}
package com.javablackbelt.utils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class ArrayUtils {
public static void print(String[] arr) {
System.out.print("Array: [ ");
for(String str: arr) {
if(str != null)
System.out.print(str.toString()+" ");
}
System.out.print(" ] size: "+arr.length);
}
public static String[] reverse(String[] arr) {
String[] a = arr;
List<String> list = Arrays.asList(a);
Collections.reverse(list);
String[] newArr = (String[]) list.toArray();
return newArr;
}
public static ArrayList<String> toArrayList(String[] arr) {
ArrayList<String> arrList = new ArrayList<String>();
for(int i = arr.length-1; i >= 0; i--)
arrList.add(arr[i]);
return arrList;
}
}
你的要求是什麼,不想修改原始數組? – kosa
你的方式看起來不錯。也許可以縮短代碼(對我們來說)。 – keyser
Btw數組「不通過引用傳遞」。它們是通過參考值傳遞的。請記住,Java中的所有內容都是按值傳遞的。 –