2013-06-25 36 views
1

我有问题。在我的主类,我有:Java - 参考变量

int ints[] = Type.desc(1000); 
int auxi[] = new int [1000]; 
auxi = ints; 

System.out.println("========== Init ========="); 
// Insertion Sort 
Algoritmos.insertionSort(ints); 
ints = auxi; 

的说明方法是:

public static int[] desc (int n){ 
    int aux[]; 
    aux = new int[n]; 
    int pos = 0; 
    for (int i = n-1; i > 0; i--) { 
     aux[pos++] = i; 
    } 

    return aux; 
} 

的整数和AUXI的值被改变。

如何保存矢量整数的初始值?

回答

3

如何保存矢量整数的初始值?

使数组的一个副本,就像这样:

int[] copy = new int[orig.length]; 
System.arraycopy(orig, 0, copy, 0, orig.length); 

注意,这使得阵列的副本。对于原语不重要,但对于参考类型,您可能需要做更多工作才能制作副本。

+0

这是唯一的方法吗? –

+0

@RenatoShumi不是,不,也可以使用'clone()'并将其转换为'int []'或Arrays.copyOf()。 – dasblinkenlight

+0

只要你不使用更高级的数据结构,比如'ArrayList' ......是的......(除了EJP提到的,即自己循环或者copyOf(),我的意思是)。 –

1

而不是做这个

auxi = ints; 

使用

System.arrayCopy() 
2
int ints[] = Type.desc(1000); 
int auxi[] = new int [1000]; 
auxi = ints; 

如何节省向量整数的初始valeu?

不要将它分配给另一个变量。上面第二行的初始化没有意义,因为您随后将ints指定为auxi。这一步不复制数组,它只是复制引用。如果要保留原始数组,请将第三行更改为复制元素的循环,或使用Arrays.copyOf()System.arraycopy()

0

你可以使用

int [] original_array_backup = new int [ints.length] 
System.arraycopy(ints, 0, original_array_backup, 0) 

所以,你可以通过original_array_backup到你的算法,而不会失去你的整数阵列的数据和命令。