package com.yourcompany.struts;public class Note
{
public static void main(String args[])
{ String name[] =
{ "Killer", "Miller" }; String name0 = "Killer"; String name1 = "Miller"; swap(name0, name1); System.out.println(name0 + "," + name1); swap(name); System.out.println(name[0] + "," + name[1]);
} public static void swap(String name[])
{ String temp; temp = name[0]; name[0] = name[1]; name[1] = temp;
} public static void swap(String name0, String name1)
{ String temp; temp = name0; name0 = name1; name1 = temp;
}
}
输出结果?

解决方案 »

  1.   

    java所有的参数都是通过value来传递的。即pass by value。
    public static void swap(String name0, String name1) 中name0只是一个reference,内部对它的修改不会影响到原来的对象。但是如果调用对象的方法,改变会确确实实的作用在原来的对象上。
      

  2.   

    看一下这个例子:
       1. public class Test{  
       2.   
       3.       
       4.   
       5.     public static void modify(StringBuffer buffer){  
       6.   
       7.         buffer.append("world");  
       8.   
       9.         buffer=new StringBuffer("no effect!");  
      10.   
      11.     }  
      12.   
      13.     public static void main(String args[]){  
      14.   
      15.         StringBuffer stringBuffer=new StringBuffer("hello ");  
      16.   
      17.         System.out.println(stringBuffer);  
      18.   
      19.         modify(stringBuffer);  
      20.   
      21.         System.out.println(stringBuffer);  
      22.   
      23.     }             
      24.   
      25. }  
      

  3.   

    String对象的特殊之处,传String和String【】是不同的。
      

  4.   

    谢谢这题目,让我把传值搞的差不多了~
    这题目我的理解是这样的.JAVA中的传参其实都传值,有时候传的这个值恰好是个引用。
    先看String,我们都知道String一但创建是无法被修改的,我们所看到的修改只是另创建了一个String而已。
    public static void swap(String name0, String name1) 此时的name0与name1都指向原来的引用,
    但正如上面所说,修改一个String对象只是另创了一个新的String而已,所以此时name0与name1都在这个方法
    里指向了新的引用。当然在main()方法中的name0与name1就不会有变化了。
    再看public static void modify(StringBuffer buffer)与public static void swap(String name[]) 
    这里仍然是2个引用StringBuffer buffer与String[] name.仍然指向原来的对象,不过与String不同的是,对
    这2个引用修改仍然会传递到原来的对象中去,所以就会看到变换后的输出。
    参照7楼说法:String对象的特殊之处,传String和String【】是不同的。这句话就是错的了,应该是传String与
    数组是不同的~一个对象不能被修改,一个能被修改~
    个人刚理解的,可能有错误,请大家指正,一起进步,呵呵!
      

  5.   

    不光是String,传个Integer也不会变。传其他的也不会变。
    看下面的代码
    swap(Integer i,Integer j){
      Integer temp;
      temp = i;
      i = j;
      j = temp;
    }
    swap(m,n);m 和 n的值不会变的。
      

  6.   

    刚看了下书,很多理解有点小误差,其实只要记住JAVA是传值就行了~
      

  7.   

    应该对java所谓的传值分清理解:一种是传primitive value,一种是传reference value。
    把reference value当成是指针更好理解,所以,在一定程度上可以说java和c++在参数传递方面是没有区别的!(前提是不纠缠引用和指针的区别)
    BTY:出现这种情况和String是 immetable class是没有关系的!