2013-06-07 3 views
2

У меня есть массив A размера 10 и другой массив B размера 5.Замена всего массива одним махом.

Оба имеют одинаковые элементы, за исключением того, что массив A имеет еще 5 нулевых элементов. Можно ли заменить значение указателя А на указатель B, как это:

arrayA = arrayB; 
+0

Если вы имеете в виду, чтобы объединить массивы, нет. Фрагмент кода просто заставит arrayA и arrayB ссылаться на один и тот же объект. – Jwosty

+0

Не уверен, что вы хотите, но похоже, что вам может понадобиться System.arraycopy - http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#arraycopy%28java.lang.Object ,% 20int,% 20java.lang.Object,% 20int,% 20int% 29 –

+0

now arrayA variable (stack) ссылается на объект arrayB (heap), если объект arrayA (heap) больше не упоминается, gc собирается удалить arrayA объект (куча), так что это потеряло ссылку на объект arrayA – nachokk

ответ

3
arrayA = arrayB; 

Сделает Arraya ссылка на arrayB. На Java нет указателей.

+0

ok спасибо, я не был уверен, и я не мог найти ничего на google странно. – david

+0

Нет проблем !!!! – TomSelleck

1

Нет, что бы просто сделать переменную arrayA ссылкой на arrayB (и потерять исходную ссылку на любой массив, который он держал, потерянные данные). Вам нужно будет скопировать его так:

String[] a = .... 
String[] b = new String[a.length]; 
System.arraycopy(a,0,b,0, a.length); 

Обратите внимание, что это копирует элементы a.length из индекса 0, всего массива.

1

Вы можете изменить ссылки для этого. http://ideone.com/Rl3u4k

Сниппет является

import java.util.*; 
import java.lang.*; 

class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     // array1 having three null elements 
     String[] array1 = new String[]{ "hello", "world", "from", "array1", null, null, null }; 
     // array2 having no null elements 
     String[] array2 = new String[]{ "hi", "this", "is", "array2" }; 

     // print array1 
     for (String value : array1) 
     { 
      System.out.println(value); 
     } 

     // swap values 
     array1 = array2; 

     // print array1 again 
     for (String value : array1) 
     { 
      System.out.println(value); 
     } 
    } 
} 

Выход

// before changing 
hello 
world 
from 
array1 
null 
null 
null 
// after changing reference 
hi 
this 
is 
array2 
1

Вы должны использовать System.arraycopy.

public class SystemDemo { 

    public static void main(String[] args) { 

     int arr1[] = { 1, 2, 3, 4, 5 }; 
     int arr2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
     System.arraycopy(arr2, 5, arr1, 0, 5); 

     for (int i : arr1) { 
      System.out.println(i); 
     } 
    } 
} 

Тогда вы получите результат:

6 
7 
8 
9 
10 
2

Ближе всего к махом это один вкладыш:

System.arrayCopy(arrayA, 0, arrayB, 0, arrayB.length); 
Смежные вопросы