任何人都可以解释java中的值调用吗?

时间:2015-01-22 07:50:07

标签: java

package com.test;

public class Callbyvalref {
    int data = 50;
    int x = 10;

    void change(Callbyvalref call) {
        call.data = call.data + 500;
    }

    void nochange(int x) {
        x = x + 25;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Callbyvalref call = new Callbyvalref();
        call.change(call);
        System.out.println("Call By reference: " + call.data);
        call.nochange(500);
        System.out.println("Call By Value: " + call.x);
    }

}

通过参考呼叫:550 按价值呼叫:10

当我改变

void nochange(int y) {
    x = x + 25;
}

通过参考呼叫:550 按价值呼叫:35

两次Call.x打印不同的值..任何人都可以解释当参数变量发生变化时发生的变化是什么。

3 个答案:

答案 0 :(得分:0)

这是基本上发生的,因为Java确实提供了对象的信息作为通过值传递的引用。

我将把这篇文章留给你进一步调查。

Is Java "pass-by-reference" or "pass-by-value"?

答案 1 :(得分:0)

将基元传递给方法时,仅复制该值。参数是一个新的局部变量,它使用传递给它的值进行初始化,与"原始"无关。值。如果你修改它,你只是修改一个局部变量,并且不能影响方法调用中使用的变量。

答案 2 :(得分:0)

在上面的代码中,在方法

void nochange(int x) {
        x = x + 25;
    }

该功能中的本地变量正在更改。如果您更改上述方法如下:

void nochange(int x) {
        this.x = x + 25;
    }

OR

void nochange(int y) {
        x = y + 25;
    }

你可以看到那里发生的事情。