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

2019-03-11 11:26:49 +08:00
 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

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

7219 次点击
所在节点    程序员
41 条回复
zsdroid
2019-03-11 13:50:23 +08:00
a = b = 123; 了解下
qwertyegg
2019-03-11 13:55:25 +08:00
早期 java 里面的读行标准做法


while ((strLine = br.readLine()) != null) {
System.out.println (strLine);
}
phpcyy
2019-03-11 14:00:48 +08:00
golang 里边好像不是这样的
grewer
2019-03-11 14:00:58 +08:00
你也网上🏄啊
gamexg
2019-03-11 14:17:01 +08:00
c 里面容易出的一个错误

if (i=1){
}

条件永远成立,所以后来出现另一种写法:

if (1==i){
}

来解决误写的问题
ExploreWay
2019-03-11 14:45:47 +08:00
哇,了解了,第一次看到,不过这种操作知识特殊一些,实际用途大吗
rochek
2019-03-11 14:49:51 +08:00
@gamexg 这种编译器会警告你的
tabris17
2019-03-11 14:50:47 +08:00
不同的语言不一样
另外:1L+1
dosmlp
2019-03-11 15:18:37 +08:00
作为 c++程序员,这是常识吧,操作符也是函数的一种
darknoll
2019-03-11 15:19:27 +08:00
什么叫赋值语句的返回值,语句哪有什么返回值,这是表达式的值
gamexg
2019-03-11 15:50:12 +08:00
@rochek #27 是的,所以现在不流行 1 == i 的写法了。
jswh
2019-03-11 15:52:22 +08:00
不是所有语言的复制语句都有返回值。
jswh
2019-03-11 15:52:32 +08:00
@jswh 赋值
chiu
2019-03-11 16:13:36 +08:00
写错过 if(i=1),但程序还能跑,应该就知道赋值语句是有返回值的了
masker
2019-03-11 16:15:13 +08:00
“我读了 Google 工具类的代码,好像发现一个不得了的事情,赶紧上 V2EX 炫一下我读了 Google 工具类的代码”
carlclone
2019-03-11 17:01:13 +08:00
所以赋值不该有返回值 , 就不会出现少写个=号出 bug 的问题了
Joyboo
2019-03-11 17:07:40 +08:00
1L +1 常识问题
MrUser
2019-03-11 17:22:35 +08:00
心疼 LZ 一秒,LZ 只是好心科谱一下,哈哈
Death
2019-03-11 18:03:24 +08:00
大多数语言的 spec 里会给出语句是否是一个值的说明
hirasawayui
2019-03-11 23:20:44 +08:00
你以为自己发现了新大陆,谁知道。。。是辆公交车

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

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

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

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

© 2021 V2EX