} } }

    Java中swap解惑

    添加时间:2013-7-29 点击量:

            直接上代码……



    public class Swap {
    

    public static void main(String[] args) {
    int a[] = new int[]{1,2};
    System.out.println(a[
    0] + +a[1]);
    swap(a,
    0,1);
    System.out.println(a[
    0] + +a[1]);

    }
    private static void swap(int[] a, int i, int j) {

    int temp = a[i];
    a[i]
    = a[j];
    a[j]
    = temp;
    }
    }




            办法调用(call by) 是一个标准的策画机科学术语,办法调用按照参数传递的景象又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最凡是的说法是传递值的是值调用,传递地址的是引用调用。这其实很不恰当,这种 这些说法很轻易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传递仍然是值调用 。 在main里输出还是本来的2、3,不管传递的是引用类型还是对象实例。



    public class Swap1
    
    {
    public static void main(String[] args)
    {
    Integer a
    =new Integer(2);
    Integer b
    =new Integer(3);
    TestSwap ts
    =new TestSwap(a,b);
    System.out.println(
    before swap:);
    ts.outPut();
    ts.dataSwap1(a,b);
    System.out.println(
    after swap:);
    ts.outPut();
    }
    }

    class TestSwap
    {
    Integer a
    =null;
    Integer b
    =null;

    public TestSwap(Integer a,Integer b)
    {
    this.a=a;
    this.b=b;
    }
    /如许不成互换,互换的只是拷贝过来的引用,而
    输出还是成员变量(输出用的是类内的办法)
    首要的是,形参和实参所占的内存地址并不一样,
    形参中的内容只是实参中存储的对象引用的一份拷贝。
    /
    protected void dataSwap0(Integer a,Integer b)
    {
    Integer temp
    =a;
    a
    =b;
    b
    =temp;
    }
    protected void dataSwap(Integer a,Integer b)
    {
    this.a = b;
    this.b = a;
    }
    //如许也可以,不过须要类内的输出,就是说输出TestSwap的成员变量
    protected void dataSwap1(Integer a,Integer b)
    {
    Integer temp
    =this.a;
    this.a=this.b;
    this.b=temp;
    }
    protected void outPut()
    {
    System.out.println(
    a=+a+ b=+b);
    }
    }


    我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
    分享到: