我一直在学习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中呢?
答案 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中,每个线程都有一个单独的堆栈,它存储所有方法,方法变量和对象”。