1

在过去的一周里,我一直在使用这些功能太多

function Rectangle setRectangle(Rectangle rect){
    rect = new Rectangle(p,q,r,s);
    return rect;
}

Rectangle rect;
rect = setRectangle(rect);

我只想做

function void setRectangle(Rectangle rect){
    rect = new Rectangle(p,q,r,s);
} 

Rectangle rect;
setRectangle(rect);

我知道 c++ 中有指针,我们可以在其中将指针设置为函数中的任何内容,并将其设置在实际变量中。我想知道如何在 Java 中做到这一点。

4

5 回答 5

0

Java 中有引用而不是指针。它们允许您修改您有参考的对象。例如,然后您传递一个Rectangleto setRectangle,该方法可以调用对象的变异成员rect,更改已传入的对象:

static void setRectangle(Rectangle rect){
    rect.Top = p;
    rect.Left = q;
    rect.Width = r;
    rect.Height = s;
}
static void main(String[] args) {
    Rectangle r = new Rectangle(a, b, c, d);
    // At this point r is defined as {a,b,c,d}
    setRectangle(r);
    // At this point r is defined as {p,q,r,s}
}

null请注意,如果您传递给:这将不起作用rect:虽然对象是通过引用传递的,但引用是通过值传递的。

于 2013-08-22T15:33:02.097 回答
0

你应该看看这篇关于java如何通过引用传递的帖子:Java是“pass-by-reference”还是“pass-by-value”?

执行此操作的 java 方法是:

void setRectangle(Rectangle rect){
    rect = new Rectangle(p,q,r,s);
} 

Rectangle rect = setRectangle(rect);

这是因为您正在 setRectangle 函数中新建一个新矩形。

但是,您可以像这样修改传入的矩形:

void setRectangle(Rectangle rect){
    rect.setP(p);
    rect.setQ(q);
    ...
} 

Rectangle rect;
setRectangle(rect);
于 2013-08-22T15:35:42.813 回答
0

该方法的目的是什么?set前缀肯定会产生误导,您应该选择一个反映该方法实际用途的前缀。

如果是创建一个矩形,那么它是一个工厂方法:

Rectangle createRectangle() {
  return new Rectangle(p,q,r,s);
}

如果要(重新)配置现有实例:

void configure(Rectangle rect) {
  rect.x=p;
  rect.y=q;
  rect.width=r;
  rect.height=s;
}
于 2013-08-22T15:43:06.547 回答
0

每次在 Java 中创建对象时,实际上都是在创建指向该对象的指针。但是,与 c/c++ 不同,Java 没有指针算法,我想你正在寻找它。每次你传递一个对象时,你实际上是在传递一个指向它的指针(引用)。

但是您编写的代码看起来不像 Java,因为 Java 没有function关键字。此外,您所写的内容看起来应该与构造函数完成相同的工作。但我不明白的是,你从哪里得到 p,q,r,s?你可以这样做:

Rectangle rect = new Rectangle(anotherRectangle) //where anotherRectangle is some other rectangle you have previously defined.

或者

Rectangle rect = new Rectangle(int width, int height)

或者

Rectangle rect = new Rectangle(int x, int y, int width, int height)

或者

Rectangle rect = new Rectangle(someDimension) //where someDimension is some other dimension you have previously defined.
于 2013-08-22T15:50:04.027 回答
0

既然你提到了 C++,将你的代码翻译成 C++ 中的等价物会很有启发性,所以你真的明白它说的是什么:

Rectangle *setRectangle(Rectangle *rect) {
    rect = new Rectangle(p,q,r,s);
    return rect;
}

Rectangle *rect;
rect = setRectangle(rect);
于 2013-08-23T01:01:43.003 回答