2012-04-13 5 views
4

Можно создать дубликат:
Make copy of array JavaКак скопировать массив по значению в Java?

Я новичок в Java, и мне нужно, чтобы скопировать содержимое одного массива в другой переменной. Однако Java всегда передает массив по ссылке вместо значения.

Вот что я имею в виду, если это вводит в заблуждение:

int test[]={1,2,3,4}; 
int test2[]; 
test2=test; 
test2[2]=8; 
for(int i=0;i<test2.length;i++) 
    System.out.print(test[i]); // Prints 1284 instead of 1234 

В этом примере я не хочу значение test изменить. Возможно ли это без использования каких-либо более продвинутых функций Java, таких как ArrayList и Vectors?

Редактировать: Я попробовал System.ArrayCopy и test.clone(), но они все еще не работают. Вот мой фактический код:

temp_image=image.clone(); 
for(int a=0;a<image.length;a++) 
    for(int b=0;b<image[0].length;b++) 
     image[a][b]=temp_image[image.length-1-a][b]; 

В основном я пытаюсь перевернуть «образ» с ног на голову. Есть ли ошибка в коде?

+0

System.arraycopy: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html –

+0

@LuiggiMendoza вы можете начать использовать более последние JavaDocs; [Java 1.4 - 3 версии (10 лет) позади] (http://en.wikipedia.org/wiki/Java_version_history). –

+0

Несомненно, есть 2000 точных копий этого? –

ответ

5

Вам нужно клонировать ваш массив.

test2=test.clone(); 
2

Начиная с Java 6 Вы можете использовать Arrays.copyOf:

test2 = Arrays.copyOf(test, test.length); 

За то, что вы хотите сделать, test.clone() отлично. Но если вы хотите сделать изменение размера, copyOf позволяет это сделать. Я думаю, что с точки зрения производительности это

System.arraycopy предоставит еще больше вариантов, если понадобится.

0

Поскольку тест и test2 оба указатели на тот же массив, вы изменяете значение как test и test2 с вашим утверждением test2[2]=8

Решением будет копировать содержимое теста в тест 2 и изменить значение по конкретному индексу test2.

for (int i=0,i<test.length,i++) 
     test2[i]=test[i] 
    //Now both arrays have the same values 

    test2[2]=8 

    for (int j=0,j<test.length,j++) 
     System.out.print(test[i]) 
     System.out.println() 
     System.out.print(test2[i]) 

Выведет

1 2 3 4 
    1 2 8 4 
Смежные вопросы