首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法"variable = variable = variable;“发生了什么?

语法"variable = variable = variable;“发生了什么?
EN

Stack Overflow用户
提问于 2012-05-29 18:39:47
回答 6查看 128关注 0票数 2

好的,我正在读一些关于RedBlackTrees的代码。我注意到这一行"v1 = v2 = v3 = v4;“,我理解类似于"v1 += v2”(将v2添加到v1的当前值)和"v1 = v2“(创建从v2到v1的引用)等内容。

代码语言:javascript
复制
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分钟才能批准问题,很抱歉让女士们先生们等待。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-29 18:41:31

发生的情况是,header的值被赋值给grand的值,而parent的值又被赋值给current。最后,4个变量保持相同的值;这个习惯用法用于快速将多个变量初始化为相同的值,相当于:

代码语言:javascript
复制
grand = header;
parent = grand;
current = parent;

赋值是从右到左进行的,实际上问题中的表达式是这样计算的:

代码语言:javascript
复制
current = (parent = (grand = header));

这是因为赋值运算符的结果实际上计算为赋值的值,例如,这是有效的:

代码语言:javascript
复制
return x = 42;

在最后一段代码中,42被赋值给x,然后返回x的值。

票数 2
EN

Stack Overflow用户

发布于 2012-05-29 18:41:08

header的参考值分配给currentparentgrand中的每一个。基本上,所有的变量都指向相同的东西。

顺便说一句,这种做法在实际编程中经常不受欢迎。

考虑一下如果你有这样的代码会发生什么:

代码语言:javascript
复制
boolean flag = false;

if(flag = true) {
    System.out.println("true");
} else {
    System.out.println("false");
}

这里的输出应该是true,因为这里实际发生的是赋值而不是比较。

票数 3
EN

Stack Overflow用户

发布于 2012-05-29 18:41:13

所有4个引用现在都有相同的header值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10797502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档