好的,我正在读一些关于RedBlackTrees的代码。我注意到这一行"v1 = v2 = v3 = v4;“,我理解类似于"v1 += v2”(将v2添加到v1的当前值)和"v1 = v2“(创建从v2到v1的引用)等内容。
public void insert( AnyType item )
{
current = parent = grand = header;但是我很好奇在内存/引用中使用current = parent = grand =header时发生了什么;
http://faculty.washington.edu/moishe/javademos/REDBlack/RedBTree.java
编辑:晚上10:46
我仍然需要等待10分钟才能批准问题,很抱歉让女士们先生们等待。
发布于 2012-05-29 18:41:31
发生的情况是,header的值被赋值给grand的值,而parent的值又被赋值给current。最后,4个变量保持相同的值;这个习惯用法用于快速将多个变量初始化为相同的值,相当于:
grand = header;
parent = grand;
current = parent;赋值是从右到左进行的,实际上问题中的表达式是这样计算的:
current = (parent = (grand = header));这是因为赋值运算符的结果实际上计算为赋值的值,例如,这是有效的:
return x = 42;在最后一段代码中,42被赋值给x,然后返回x的值。
发布于 2012-05-29 18:41:08
将header的参考值分配给current、parent和grand中的每一个。基本上,所有的变量都指向相同的东西。
顺便说一句,这种做法在实际编程中经常不受欢迎。
考虑一下如果你有这样的代码会发生什么:
boolean flag = false;
if(flag = true) {
System.out.println("true");
} else {
System.out.println("false");
}这里的输出应该是true,因为这里实际发生的是赋值而不是比较。
发布于 2012-05-29 18:41:13
所有4个引用现在都有相同的header值。
https://stackoverflow.com/questions/10797502
复制相似问题