你知道 赋值语句其实是有返回值的吗?

2019 年 3 月 11 日
 rizon

今天写代码,偶然从 google 工具类的源码中发现了赋值语句是有返回值的! 然后我瞬间想明白了,一个之前困扰我许久的 if 语句块中直接使用赋值语句的那个很久之前的问题。 /t/531367

先放结果

    Long a;
    public Long test() {
        if ((a = 123L) == 321L) {
            System.out.println(a);
        }
        return a = 123L;
    }

网上有人分析过汇编,https://blog.csdn.net/w605283073/article/details/85219022

我估计还是有很多人不知道这件事,或者就是忘了,再或者就是没去想这个返回值是可以简化代码书写的。所以分享一下

7932 次点击
所在节点    程序员
41 条回复
1a0ma0
2019 年 3 月 11 日
这不是常识吗……
smeraldo
2019 年 3 月 11 日
火星😂。。
liuzhedash
2019 年 3 月 11 日
没有被 i=i++这种考题折腾过嘛?
Lin0936
2019 年 3 月 11 日
这。。。。。
congeec
2019 年 3 月 11 日
你没用过 C 语言么?
你不知道 python 3.8 的 assignment expression 么?
lihongjie0209
2019 年 3 月 11 日
C 就是这样,Java 从 C 直接抄过来的
Raymon111111
2019 年 3 月 11 日
没读过源码吗...

很多这种
suit
2019 年 3 月 11 日
在 C++,运算符可以用函数重载,所以有返回值一点都不奇怪
jeffersonpig
2019 年 3 月 11 日
这真的是没几个人不知道的吧
yim7
2019 年 3 月 11 日
学 c 没遇到过吗 ,while ( (ch = getchar()) != '#') {}
ballshapesdsd
2019 年 3 月 11 日
我一个学 python 的都知道(微笑)
dorentus
2019 年 3 月 11 日
并不是所有编程语言的赋值语句都是可求值(有返回值)的。
AV1
2019 年 3 月 11 日
你知道逗号(,)其实是有返回值的吗?
var a = (1, 2, 3);
console.log(a);//=>3
idyu
2019 年 3 月 11 日
if(($erpRegistDateGeqUnix = strtotime($erpRegistDateGeq)) > 0) {
$data['erpRegistDateGeq'] = date('Ymd', $erpRegistDateGeqUnix);
}
PHP
zycpp
2019 年 3 月 11 日
c 语言刷题必备语句
while((ch=getchar())!=EOF)
HuHui
2019 年 3 月 11 日
b = (a+b) - (a=b);
看来没学过这个
expy
2019 年 3 月 11 日
a=b=c 大概就用到了吧。
wingkou
2019 年 3 月 11 日
@DOLLOR C 艹甚至还能重载逗号,这才是最骚的,lz 估计要更惊讶。
183shl
2019 年 3 月 11 日
初学时经常被 if 中写一个=困扰半天😁
lazyfighter
2019 年 3 月 11 日
之前看源码的时候 这个东西困扰了我很久

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX