使用包装类来交换类

时间:2017-06-19 20:13:41

标签: java object swap

这是geeksforgeeks.org的一个程序。我无法理解使用wrappper类。任何人都可以详细解释这段代码。 它是一个交换两个对象的程序,以便交换变量。当我们不知道类中变量的数量和类型时使用。 我提供了进一步阅读的链接。

http://www.geeksforgeeks.org/swap-exchange-objects-java/

// A Java program to demonstrate that we can use wrapper
// classes to swap to objects

// A car with model and no.
class Car
{
    int model, no;

    // Constructor
    Car(int model, int no)
    {
        this.model = model;
        this.no = no;
    }

    // Utility method to print object details
    void print()
    {
        System.out.println("no = " + no + 
                           ", model = " + model);
    }
}

// A Wrapper over class that is used for swapping
class CarWrapper
{
   Car c;

   // Constructor
   CarWrapper(Car c)   {this.c = c;}
}

// A Class that use Car and swaps objects of Car
// using CarWrapper
class Main
{
    // This method swaps car objects in wrappers
    // cw1 and cw2
    public static void swap(CarWrapper cw1, 
                            CarWrapper cw2)
    {
        Car temp = cw1.c;
        cw1.c = cw2.c;
        cw2.c = temp;
    }

    // Driver method
    public static void main(String[] args)
    {
        Car c1 = new Car(101, 1);
        Car c2 = new Car(202, 2);
        CarWrapper cw1 = new CarWrapper(c1);
        CarWrapper cw2 = new CarWrapper(c2);
        swap(cw1, cw2);
        cw1.c.print();
        cw2.c.print();
    }
}

1 个答案:

答案 0 :(得分:1)

在Java中,所有内容都是按值传递的,对于对象,它的位置是通过值传递的,这意味着我们可以引用该对象。现在我们为什么要在这里使用包装类。在第一个代码中,我们知道有多少成员,所以我们只是简单地交换类的成员。如果我们不知道或者有很多成员变量,该怎么办?第二个例子解释了这个。我们只是交换对象的引用。 在Java中,这种类型的更改不会反映出来,即将对象的引用分配给其他对象但是,如果我们对这些对象的成员变量进行更改,则会反映出更改。在第三个代码示例中,我们首先创建Car对象,然后是CarWrapper,它具有Car类型的成员(将包含Car对象的位置)。现在,当我们调用swap方法时,我们传递两个CarWrapper对象的位置,然后我们通过交换成员内部的位置来交换CarWrapper对象的成员,所以现在它们指向交换位置。 public static void swap(CarWrapper cw1, CarWrapper cw2) { Car temp = cw1.c; cw1.c = cw2.c;//here changing location to Car object2(c2) cw2.c = temp;//here changing location to Car object1(c1) }