这是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();
}
}
答案 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)
}