您现在的位置是:主页 > news > 万脑网站建设/全国十大跨境电商排名
万脑网站建设/全国十大跨境电商排名
admin2025/5/15 2:36:30【news】
简介万脑网站建设,全国十大跨境电商排名,不备案 网站 盈利,网站建设云服务器与虚拟主机注意:最初我发布C#代码在这个答案为了说明的目的,因为C#允许你传递int参数通过引用ref关键字。我决定更新它与实际法律Java代码使用我发现在谷歌的第一个MutableInt类大约什么ref在C#。我不能真正地告诉这是否有助于或伤害了答案。我会说,我个…
注意:最初我发布C#代码在这个答案为了说明的目的,因为C#允许你传递int参数通过引用ref关键字。我决定更新它与实际法律Java代码使用我发现在谷歌的第一个
MutableInt类大约什么ref在C#。我不能真正地告诉这是否有助于或伤害了答案。我会说,我个人没有做过这么多的Java开发;所以我知道可以有更多的惯用方法来说明这一点。
也许如果我们写出一个方法来做对等的x,它会使这个更清楚。
public MutableInt postIncrement(MutableInt x) {
int valueBeforeIncrement = x.intValue();
x.add(1);
return new MutableInt(valueBeforeIncrement);
}
对?递增传递的值并返回原始值:这是postincrement运算符的定义。
现在,让我们看看这个行为在你的示例代码中如何发挥:
MutableInt x = new MutableInt();
x = postIncrement(x);
postIncrement(x)做什么?增加x,是。然后返回增量之前的x。然后,此返回值将分配给x。
因此,分配给x的值的顺序为0,然后为1,然后为0。
如果我们重写上面的话,这可能会更清楚:
MutableInt x = new MutableInt(); // x is 0.
MutableInt temp = postIncrement(x); // Now x is 1, and temp is 0.
x = temp; // Now x is 0 again.
你的固定上的事实,当你用y替换上面的作业左侧的x,“你可以看到,它首先增加x,后来属性它y”打扰我困惑。它不是被分配给y的x;它是以前分配给x的值。真的,注入y使事情没有不同于上面的情况;我们得到:
MutableInt x = new MutableInt(); // x is 0.
MutableInt y = new MutableInt(); // y is 0.
MutableInt temp = postIncrement(x); // Now x is 1, and temp is 0.
y = temp; // y is still 0.
所以很清楚:x = x有效地不改变x的值。它总是使x具有值x0,然后x0 1,然后再x0。
更新:顺便说一下,为了避免怀疑x曾经被分配到上面例子中的增量操作和赋值之间的1“,我把一个快速演示示例说明了这个中间值确实”存在“,虽然它将永远不会在执行线程上“看到”。
演示调用x = x;在一个循环中,而单独的线程连续打印x的值到控制台。
public class Main {
public static volatile int x = 0;
public static void main(String[] args) {
LoopingThread t = new LoopingThread();
System.out.println("Starting background thread...");
t.start();
while (true) {
x = x++;
}
}
}
class LoopingThread extends Thread {
public @Override void run() {
while (true) {
System.out.println(Main.x);
}
}
}
下面是上面程序的输出的摘录。注意1和0的不规则出现。
Starting background thread...
0
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1