Before Swap, a is 10
Before Swap, b is 50
After Swap a is 10
After Swap b is 50
base type:
Before Swap i is 5
Before Swap j is 9
After Swap i is 5
After Swap j is 9
after change:   welcome to java world!!!
//以上上面程序的运行结果,为什么传Integer对象的时候,没有变化呢?!

解决方案 »

  1.   

    public static void swap(Integer ia, Integer ib){
    Integer temp = ia; 
    ia = ib; 
    ib = temp; 
    }
    ----------------------
    swap(a, b); 调用这一句时,首先执行把ia=a,ib=b,只是说明ia,ib分别指向a,b指向的对象,然后在方法体中又使ia指向b,ib指向了a,但是a,b指向的对象仍是原来的,没有改变.仔细想一下.
      

  2.   

    1。基本数据类型传值。
    2。包装类属于声明类类型传地址。用类类型的实例 .toString()方法,打印出哈希玛,@指向基类地址。
      

  3.   

    To: vgvg(成功靠自己)  & ALL
    谢谢楼上的各位,好像明白了点不过有新的问题
    public class Test{
         public static void print(String a){}
         public static void main(String args[]){
           String a = new String("welcome");
           print(a);         //这个传进去的是String 对象的引用
           print(new String(" to java world!!")); //那么这个传进去的是什么呢?!
        }}
      

  4.   

    print(new String(" to java world!!")); //那么这个传进去的是什么呢?!---------------------------------------------
    new String(" to java world!!")不就是构造一个String对象吗?
    当然也是对象的引用了 ^_^
      

  5.   

    赫赫,这个问题比较有意思执行swap后,ia和ib分别指向了对象b和a但是原来的引用a和b仍然只想对象a和b我相信对象传参不是传值而是传递引用你拿swap作例子刚好不能说明问题如果你在swap中通过ia和ib对所引用的对象作一些修改,就能看到期望的结果
      

  6.   

    在C++中,我们才讨论传值和传地址(指针)的问题。Java中只有值传递,传递引用也好,传递基本数据类型值也好,都是值传递。不过引用特殊一点而已。
    如果你感到地址(指针)与引用好像差不多,其实引用指向的不是地址,而是某一个数据结构;如果你知道地址(指针)与引用的区别,可以“简单的”把引用看成一个地址。
      

  7.   

    哪位高人给出楼主的sway(a,b)的交换实现.....学习下了....
      

  8.   

    public class Test{
    public static void main(String args[]) {
    Integer a=new Integer(10);
    Integer b= new Integer(50); 
    int i=5,j=9;
    System.out.println("Before Swap, a is " + a); 
    System.out.println("Before Swap, b is " + b); 
    Integer temp = a; 
    a = b; 
    b = temp; 
    System.out.println("After Swap a is " + a); 
    System.out.println("After Swap b is " + b); System.out.println("  "  );
    swap(a,b);//假的!
                      System.out.println("  "  ); System.out.println("After Swap a is " + a); 
    System.out.println("After Swap b is " + b);
    }
    public static void swap(Integer ia, Integer ib){
    System.out.println("Before Swap, a is " + ia); 
    System.out.println("Before Swap, b is " + ib); 
    Integer temp = ia; 
    ia = ib; 
    ib = temp; 
    System.out.println("After Swap a is " + ia); 
    System.out.println("After Swap b is " + ib);
    }
    } 只能就地正法。
      

  9.   

    To Coolingverse(SNAKE):
    "像简单的数据类型是按值,而像对象呢,那就是按引用,其实本质上是按指针传递!"
    问题不在于区别Java的引用和指针,而在于区别C++的引用和指针。如果按Java的说法,引用=指针,则可以说对象按引用传递,但引用仍然是一个值,在传递引用这个值。引用这个值,就是new表达式的值。所以,统一的说,是值传递。在值传递中,引用这个值比较特殊。一般而言,传值和传地址的问题,关键在于指针不是值,而是一个变量!变量与变量值的区别应该知道吧。而Java中的引用(说指针也可以),它不是变量。所以Java中一般不讨论传地址的问题(它没有指针变量)。
    你的说法也是对的,前提是你的听众不知道C++的指针。否则,他容易混淆。