# public class PassArray {  
#     public static void main(String[] args) {  
#         int array[]={1,2,3,4,5};  
#         for(int value:array){  
#             System.out.print(value);  
#         }  
#         System.out.println("改变后的数组");  
#         modify(array);  
#         for(int value:array){  
#             System.out.print(value);  
#         }  
#         System.out.println("现在改变元素");  
#         modify(array[3]);     
#         System.out.println("再次打印数组,看第3个元素是什么");  
#         for(int value:array){  
#             System.out.print(value);  
#         }  
#     }  
#   
#     private static void modify(int i) {  
#         System.out.println("第3个元素修改后是:");  
#         i*=3;  
#         System.out.println(i);  
#           
#     }  
#   
#     private static void modify(int[] array) {  
#         for(int counter=0;counter<array.length;counter++){  
#             array[counter]*=2;  
#         }  
#           
#     }  
#       
#   
# }   
第一次方法调用modify(int[] array)是传的一个数组的引用,结果形参,实参指向了同一个引用,再回到main方法时,数组已经改成了{2,4,6,8,10},
第2次方法调用modify(int i) 是传递了一个基本类型,一个数组元素,第3个元素,再回到MAIN方法时,这个元素仍然没有变化。
书上有2句话:1.当方法修改基本类型参数时,它对调用时采用的变量没有影响
2.对于引用类型的型参也是如此,如果讲另一个对象的引用赋给引用类型的型参,则型参指向新对象,但调用时的变量仍指向原来的对象。
看完这2句,我再看这试验代码,完全晕了~

解决方案 »

  1.   

    数组是地址传递,基本数据类型是值传递,我的BLOG有专门的关于参数传递的介绍文章
      

  2.   

    楼主你只要记住一点就行了,基本数据类型和String类型是值传递,参数使用后不会改变原始值。
      

  3.   

      java没有直接传参数本身一说,要么传给你个基本类型的副本,你操作的都是这个基本类型的另一个克隆版本。而表示地址的参数,比如什么数组拉,对象啦什么的,传进来的是地址本身的一个指针副本,你可以通过指针把指向地址里面具体内容,比如数组的第一个数给改了,但是你改自己指针指向的位置,改变不了原始参数指针指向的位置。所以java方法中传递进来的参数,
       本质上来说传得都是同名的副本,而不是参数本身。