Java:方法似乎是通过引用传递的

标签 java reference

我一直理解Java是按值传递参数的。我有一些代码似乎无法调试。这是一个简化版本:

private isFinished = false;
private int target, count;

public Example(int target){
    this.target = target;
}
public void doProcess(int x){
    count += x;
}
public boolean isFinished(){
    if(x < target){
        return false;
    } else {
        return true;
    }
}


private Example example;

public Test(Example e){
    this.example = e;
}
public isFinished(){
    return e.isFinished();
}
public void doProcess(){
    e.doProcess(3);
}


private Example example;
public Generate(Example e){
    this.example = e;
}
public void generate(int num){
    for(int y=0; y < num; y++){
        Test t = new Test(example);
        while(t.isFinished == false){
            t.doProcess();
        }
    }
}

Generate 类采用示例作为参数。它使用此示例并将其传递给“测试”。发生的情况是,当调用Generate.generate()时,第一次迭代工作正常,但在每次迭代时都应该使用作为参数传递的示例进行新的测试。当调用 doProcess() 时,“示例”似乎会发生变化,而我想要的是每次使用创建时传递给生成的相同示例创建一个新的测试。

最佳答案

Java 确实按值传递,但在引用参数的情况下,传递的是引用的值,而不是对象的值。这具有副作用,即这些引用指向的实例可以在方法内更改,并且在方法返回后可以看到更改。

关于Java:方法似乎是通过引用传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575869/

相关文章:

java - 监控 Tomcat 进程 CPU 峰值

java - 如何使用以 Object 作为参数的方法正确实现接口(interface)?

c++ - 引用每个 const 字符串是一种好习惯吗?

visual-studio-2010 - VS2010 上的 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间在哪里?

c - 函数引用返回的变量给出了奇怪的值

java - 手动将 Spring MVC 项目导入 Eclipse

java - 无法创建 Java 虚拟机 - Mac OS 上的 Tomcat 服务器

c++ - 如何用 C++ 中的引用替换指针?

java - boolean 递归第 2 部分

c++ - 导致未定义行为的悬挂引用