这两个构造函数有什么区别?
Circle (Point2D center, double radius) {
this.center = center;
this.radius = radius;
}
Circle (Point2D center, double radius) {
this.center = new Point2D(center.getX(), center.getY());
this.radius = radius;
}
以下是 Point2D 类的代码。两个版本的构造函数都能正常工作。我只是不确定它们之间有什么区别。
class Point2D {
double x;
double y;
Point2D () {
x = 0;
y = 0;
}
Point2D (double x, double y) {
this.x = x;
this.y = y;
}
void setX (double x) {
this.x = x;
}
void setY (double y) {
this.y = y;
}
void setXY (double x, double y) {
this.x = x;
this.y = y;
}
double getX () {
return x;
}
double getY () {
return y;
}
double distance (Point2D p) {
double x1 = p.getX();
double y1 = p.getY();
return Math.sqrt(Math.pow(x1 - x, 2) + Math.pow(y1 - y, 2));
}
double distance (double x, double y) {
return Math.sqrt(Math.pow(x - this.x, 2) + Math.pow(y - this.y, 2));
}
Circle类有2个字段,中心点和半径。中心点是Point2D类型,半径是double类型。我尝试编译和运行了构造函数的两个版本,两个版本都可以正常工作。所以我很困惑应该使用哪个版本,以及它们之间的区别,因为在第一个版本中我没有使用new操作来初始化中心点对象。
this.center
和center
变量将持有同一个共享的Point2D
实例的引用。而在第二个构造函数调用后,会创建一个额外的实例(防御性拷贝)-this.center
和center
将使用独立的引用(Point2D
值)。 - Cootri