Java方法是否存储值的副本?

时间:2017-01-17 06:19:20

标签: java c

  

我一直在学习C,现在我想将它与Java进行比较

如果我这样做

void changeVal(int x){
    ++x;
}
C 中的

仅更改存储在堆栈框架中的x的值。它仅更改x的本地副本。

那是什么

int x = 5;
public void changeValJava(int x){
    ++x; 
}

Java?

中进行

是否会更改x的值或x的实例值?

C 中,我们需要使用指向x的指针来更改实际值,但在Java中呢?

4 个答案:

答案 0 :(得分:4)

在Java中,++x;更改了参数x。字段x阴影。要修改字段,您需要类似

的内容
++this.x;

请注意,字段x和变量x不相关(除了具有相同的名称)。

答案 1 :(得分:0)

这里,它将输入参数值x从5更改为10.

line 1 int x = 5;
line 2 public void changeValJava(int x){
line 3    ++x; 
       }

int是一个原始变量,在第2行 - 最好引用为Initialization而不是引用为实例。在第2行,x变量初始化为5,而第3行x变量重新初始化为6 - 如x = x + 1;

第1行的变量x可以使用类的实例变量或使用此关键字来引用或更新。

答案 2 :(得分:0)

与C类似,Java也存储x的本地值。因此,当您使用x时,它会递增传递给函数changeValJava的{​​{1}}值。 在Java中,'实际' x实例变量,而changeValJava中的x只是一个局部变量。这两个x是不同的。

Java不支持指针,改变实际的'值,您需要关联包含x的对象。这个对象是自我对象,由this关键字引用。所以,你可以写

++this.x

答案 3 :(得分:0)

在java中,每个线程都有一个单独的堆栈。所有方法及其变量都存储在此堆栈中。

你的问题似乎对我来说有点混乱。

如果您询问按值传递并通过引用传递(C中的指针)

非常清楚 Java仅支持按值传递

如果你问, java如何存储方法变量及其对象,那么 “在java中,每个线程都有一个单独的堆栈,它存储所有方法,方法变量和对象”