public class TestArrayCopy
{
public static void main(String[] args)
{
String[] s = {"Microsoft","IBM","Sun","Oracle","Apple"} ;
String[] sBak = new String[5] ;
System.arraycopy(s,0,sBak,0,s.length) ;
sBak[0]="Yahoo" ;
for(int i=0 ;i<s.length ;i++)
{
System.out.print(s[i]+" ") ;
} System.out.println() ; int[][] intArray = {{1,2},{1,2,3},{3,4}} ;
int[][] intArrayBak = new int[3][] ;
System.arraycopy(intArray,0,intArrayBak,0,intArray.length) ;
intArrayBak[2][1] = 100 ;
for(int i=0 ;i<intArray.length ;i++)
{
for(int j=0 ;j<intArray[i].length ;j++)
{
System.out.print(intArray[i][j]+" ") ;
}
System.out.println() ;
}
}
}
如题!!麻烦说的通俗易懂点,谢谢 !1

解决方案 »

  1.   

    能说的清楚点吗?我这里不好测试java程序,你这2个程序的结果分别是什么?
      

  2.   

    "Microsoft","IBM","Sun","Oracle","Apple"
    1 2
    1 2 3
    3 100
    现在结果是这样的,就是第一个copy的数组没改变原来的数组,
    而第二个copy的数组改变了原来的数组
      

  3.   

     我看书上说他们都指向同一块地方的,既然这样,第一个Microsoft应该变成Yahoo才是呀,这个不懂,请高手赐教 !
      

  4.   


    public class TestArrayCopy 

    public static void main(String[] args) 

    String[] s = {"Microsoft","IBM","Sun","Oracle","Apple"} ; 
    String[] sBak = new String[5] ; 
    System.arraycopy(s,0,sBak,0,s.length) ; 
    sBak[0]="Yahoo" ; 
    for(int i=0 ;i <s.length ;i++) 

    System.out.print(s[i]+" ") ; 


    System.out.println() ; 

    int[][] intArray = {{1,2},{1,2,3},{3,4}} ; 
    int[][] intArrayBak = new int[3][] ; 
    System.arraycopy(intArray,0,intArrayBak,0,intArray.length) ; 
    intArrayBak[2][1] = 100 ; 

    for(int i=0 ;i <intArray.length ;i++) 

    for(int j=0 ;j <intArray[i].length ;j++) 

    System.out.print(intArray[i][j]+" ") ; 


    System.out.println() ; 


    }
      

  5.   

    因为二维数组中的每一个元素都是一个数组,数组都是引用类型
    所以,你在进行二维数组拷贝的时候,要注意,拷贝的都是引用的地址
    当intArrayBak[2][1] = 100 的时候
    由于引用地址指向发生了变化,所以牵连着原数组的值也发生了变化