我对传递给Java中的方法的信息感到有点困惑。我目前正在Oracle网站上学习Java基础知识,虽然我理解的大多数事情没有问题,但有些事情对我来说还不够清楚。
https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html
这是我怀疑的地方。当他们写下面的代码......
public void moveCircle(Circle circle, int deltaX, int deltaY) {
// code to move origin of circle to x+deltaX, y+deltaY
circle.setX(circle.getX() + deltaX);
circle.setY(circle.getY() + deltaY);
// code to assign a new reference to circle
circle = new Circle(0, 0);
}
circle = new Circle(0, 0);
是什么意思?它是在创建一个新的Cicle对象还是什么?我认为让我感到困惑的是如何在方法声明中使用object参数。
有人可以清楚地向我解释传递参考数据的类型是什么吗?
答案 0 :(得分:1)
从一个更简单的例子开始:
public class Main {
public static void main(String... args) {
int x = 7;
add(x);
System.out.println(x);
}
public static void add(int y){
y = 10;
}
}
您希望此代码打印出来的内容是什么?
打印出 7 ,因为即使我们重新分配add()
函数收到的参数,也不会影响传入的原始值功能。 main()
方法中的x变量仍为7。
示例代码只是向您展示使用Objects而不是基元的更复杂的示例。您应该学习的教训是,重新分配函数中的参数不会影响其原始值。
答案 1 :(得分:1)
方法返回时,这些更改将保持不变。然后为circle指定一个对x = y = 0的新Circle对象的引用。但是,这个重新分配没有持久性,因为引用是按值传递的,不能更改。
仔细阅读最后一段。
您可以修改引用圆的属性,但如果为变量分配新引用,则不会对原始对象进行任何更改。它只告诉myCircle
引用新创建的对象。在方法超出范围后,此对象立即被垃圾收集。
答案 2 :(得分:0)
您提出的两个问题的解释: -
circle = new Circle(0, 0)
表示我们正在为Circle对象的构造函数赋值。
是的,这是通过将值传递给引用变量circle
来创建新的圆形对象。
希望它有所帮助!