java - 对参数传递感到困惑

标签 java

我对 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 对象还是什么?我认为让我困惑的是如何在方法声明中使用对象参数。

有人可以清楚地向我解释传递引用数据类型是什么吗?

最佳答案

从一个更简单的例子开始:

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。

示例代码只是向您展示了一个使用对象而不是基元的更复杂的示例。您应该学到的教训是,在函数中重新分配参数不会影响其原始值

关于java - 对参数传递感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242789/

相关文章:

java - 如何对 ArrayList 中的项目进行排序,并根据 ArrayList 中的顺序更改另一个数组中项目的位置?

java - 涉及返回类型、通配符和交集类型的类型推断

java - 分割字符串并存储在 HashMap Java 8 中的模式

java - 复制带空格的文件

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

java链表复制构造函数

java - 这就是所谓的重载吗?

java - 将 long 转换为 "byte-array-ed"文本,无需堆分配

java - 在 Linux 上指定 JVisualVM 堆转储文件位置

java - 列出所有进程?