2013-10-07 170 views
0

我想颠倒一个位图数组,而不修改源数组。但问题是源数组也正在倒转。我做错了什么或者我想以其他方式做? 感谢您的帮助。Java数组:Java通过引用传递并按值传递?

private GalleryAdapter galleryAdapter; 
private ReverseGalleryAdapter rGalleryAdapter; 

public void onCreate(Bundle savedInstanceState) { 
    galleryAdapter = new GalleryAdapter(this, imageThumbnails, imagePaths, 
      videoThumbnails, videoPaths); 

    imagegrid.setAdapter(galleryAdapter); 

    rGalleryAdapter = new ReverseGalleryAdapter(this, reverseBArray(videoThumbnails), reverseSArray(videoPaths), 
      reverseBArray(imageThumbnails), reverseSArray(imagePaths)); 

    imagegrid2.setAdapter(rGalleryAdapter); 
} 

private Bitmap[] reverseBArray(Bitmap[] v){ 
    Bitmap[] bTemp; 
    bTemp = v; 
    int len = bTemp.length; 
    Bitmap temp; 
    for (int i = 0; i < len/2; i++) 
    { 
     temp = bTemp[i]; 
     bTemp[i] = bTemp[len-1 - i]; 
     bTemp[len-1 - i] = temp; 
    } 
    return bTemp; 
} 

private String[] reverseSArray(String[] s){ 
    String[] sTemp; 
    sTemp =s; 
    int len = sTemp.length; 
    String temp; 
    for (int i = 0; i < len/2; i++) 
    { 
     temp = sTemp[i]; 
     sTemp[i] = sTemp[len-1 - i]; 
     sTemp[len-1 - i] = temp; 
    } 
    return sTemp; 
} 
+0

尽可能避免克隆。只有当你没有其他选择时才使用。 :HTTP://www.javapractices.com/topic/TopicAction.do标识= 71 –

回答

2

随着bTemp = v;你指的是同一个Object

你可以在你的情况下使用clone()方法使数组的副本:

bTemp = v.clone(); 

然后你就可以随意修改它,并将其返回。

3
Bitmap[] bTemp; 
bTemp = v; 

当你这样做,既defenitley引用同一个数组,因为你不是创建一个新的阵中还有。

同样的情况,在这里也

String[] sTemp; 
    sTemp =s; 

可能soution:Make copy of array Java(建议阅读可能的方式后选择)。

我从Official docs建议:(参见复制阵列部分)

System类具有可用于有效地从一个阵列将数据复制到另一个的arraycopy()方法:

public static void arraycopy(Object src, int srcPos, 
          Object dest, int destPos, int length) 
-1

Java没有按值传递对象。您将数组对象引用传递给您的方法,从而传递数组本身。最好的方法是创建数组的副本并传递数组的副本。

0

记住数组是对象,并且在方法reverseArray中,您重新指定了对temp的引用,所以现在对同一个对象有2个引用(v和temp)。进行下面提到的相应更改

private Bitmap[] reverseBArray(Bitmap[] v){ 
    Bitmap[] bTemp; 
    bTemp = v; // CHANGE IT to bTemp = new Bitmap[v.length] 
    int len = bTemp.length; 
    Bitmap temp; 
    for (int i = 0; i < len/2; i++) 
    { 
     temp = bTemp[i]; 
     bTemp[i] = bTemp[len-1 - i]; 
     bTemp[len-1 - i] = temp; 
    } 
    return bTemp; 
} 
0

我想你想让这两个对象都对吗? 如果是这样,我认为你可以使用clone()方法,并传递克隆的对象的方法,而无需修改原始对象