Java数组:Java按引用传递和按值传递?

Java数组:Java按引用传递和按值传递?,java,pass-by-reference,pass-by-value,Java,Pass By Reference,Pass By Value,我试图在不修改源数组的情况下反转位图数组。但问题是源阵列也在反转。我是做错了什么事,还是我想用其他方式去做? 谢谢你的帮助 private GalleryAdapter galleryAdapter; private ReverseGalleryAdapter rGalleryAdapter; public void onCreate(Bundle savedInstanceState) { galleryAdapter = new GalleryAdapter(this, ima

我试图在不修改源数组的情况下反转位图数组。但问题是源阵列也在反转。我是做错了什么事,还是我想用其他方式去做? 谢谢你的帮助

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;
}
专用GalleryAdapter GalleryAdapter;
专用反向AlleryAdapter或AlleryAdapter;
创建时的公共void(Bundle savedInstanceState){
galleryAdapter=新的galleryAdapter(此、图像缩略图、图像路径、,
视频缩略图、视频路径);
imagegrid.setAdapter(galleryAdapter);
rGalleryAdapter=新的ReverseGalleryAdapter(此、reverseBArray(视频缩略图)、ReverseArray(视频路径),
反向阵列(图像缩略图),反向阵列(图像路径);
imagegrid2.setAdapter(rGalleryAdapter);
}
专用位图[]反向阵列(位图[]v){
位图[]bTemp;
bTemp=v;
int len=bTemp.length;
位图温度;
对于(int i=0;i
在执行此操作时,defenitley会同时引用同一个数组,因为您没有在那里创建新数组

同样的情况也发生在这里

  String[] sTemp;
    sTemp =s;
可能的答案:(建议阅读可能的方法后选择)

我的建议来自:(参见复制数组部分)

System类有一个arraycopy()方法,可用于将数据从一个数组高效复制到另一个数组:

在执行此操作时,defenitley会同时引用同一个数组,因为您没有在那里创建新数组

同样的情况也发生在这里

  String[] sTemp;
    sTemp =s;
可能的答案:(建议阅读可能的方法后选择)

我的建议来自:(参见复制数组部分)

System类有一个arraycopy()方法,可用于将数据从一个数组高效复制到另一个数组:


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

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

记住数组是对象,在方法reverseArray中,您正在重新指定对temp的引用,因此现在您有两个对同一对象的引用(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;
}
私有位图[]反向阵列(位图[]v){
位图[]bTemp;
bTemp=v;//将其更改为bTemp=new位图[v.length]
int len=bTemp.length;
位图温度;
对于(int i=0;i
请记住,数组是对象,在方法reverseArray中,您正在重新指定对temp的引用,因此现在您有两个对同一对象的引用(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;
}
私有位图[]反向阵列(位图[]v){
位图[]bTemp;
bTemp=v;//将其更改为bTemp=new位图[v.length]
int len=bTemp.length;
位图温度;
对于(int i=0;i
我想你想保持两个对象都正确?
如果是这样的话,我认为您可以使用clone()方法并将克隆的对象传递给该方法,而无需修改原始对象

我认为您希望两个对象都正确吗?
如果是这样,我认为您可以使用clone()方法并将克隆的对象传递给该方法,而无需使用
bTemp=v修改原始对象

您指的是同一
对象

在本例中,您可以使用
clone()
方法制作阵列的副本:

bTemp = v.clone();

然后您可以自由修改并返回它。

使用
bTemp=v您指的是同一
对象

在本例中,您可以使用
clone()
方法制作阵列的副本:

bTemp = v.clone();

然后您可以自由修改并返回它。

尽可能避免克隆。仅在没有其他选项时使用:尽量避免克隆。仅在没有其他选项时使用: