今天写代码,偶然从 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
我估计还是有很多人不知道这件事,或者就是忘了,再或者就是没去想这个返回值是可以简化代码书写的。所以分享一下
1
1a0ma0 2019-03-11 11:32:23 +08:00 via iPhone
这不是常识吗……
|
2
smeraldo 2019-03-11 11:33:58 +08:00
火星😂。。
|
3
liuzhedash 2019-03-11 11:34:08 +08:00
没有被 i=i++这种考题折腾过嘛?
|
4
Lin0936 2019-03-11 11:35:05 +08:00
这。。。。。
|
5
congeec 2019-03-11 11:38:56 +08:00
你没用过 C 语言么?
你不知道 python 3.8 的 assignment expression 么? |
6
lihongjie0209 2019-03-11 11:40:59 +08:00
C 就是这样,Java 从 C 直接抄过来的
|
7
Raymon111111 2019-03-11 11:41:16 +08:00
没读过源码吗...
很多这种 |
8
suit 2019-03-11 11:45:57 +08:00
在 C++,运算符可以用函数重载,所以有返回值一点都不奇怪
|
9
jeffersonpig 2019-03-11 11:50:04 +08:00
这真的是没几个人不知道的吧
|
10
yim7 2019-03-11 11:51:15 +08:00
学 c 没遇到过吗 ,while ( (ch = getchar()) != '#') {}
|
11
ballshapesdsd 2019-03-11 11:53:33 +08:00
我一个学 python 的都知道(微笑)
|
12
dorentus 2019-03-11 11:54:55 +08:00
并不是所有编程语言的赋值语句都是可求值(有返回值)的。
|
13
DOLLOR 2019-03-11 11:56:38 +08:00
你知道逗号(,)其实是有返回值的吗?
var a = (1, 2, 3); console.log(a);//=>3 |
14
idyu 2019-03-11 11:59:17 +08:00
if(($erpRegistDateGeqUnix = strtotime($erpRegistDateGeq)) > 0) {
$data['erpRegistDateGeq'] = date('Ymd', $erpRegistDateGeqUnix); } PHP |
15
zycpp 2019-03-11 12:02:11 +08:00 via iPhone
c 语言刷题必备语句
while((ch=getchar())!=EOF) |
16
HuHui 2019-03-11 12:13:32 +08:00 via Android
b = (a+b) - (a=b);
看来没学过这个 |
17
expy 2019-03-11 12:15:34 +08:00
a=b=c 大概就用到了吧。
|
19
183shl 2019-03-11 13:20:08 +08:00 via Android
初学时经常被 if 中写一个=困扰半天😁
|
20
lazyfighter 2019-03-11 13:41:54 +08:00
之前看源码的时候 这个东西困扰了我很久
|
21
zsdroid 2019-03-11 13:50:23 +08:00
a = b = 123; 了解下
|
22
qwertyegg 2019-03-11 13:55:25 +08:00
早期 java 里面的读行标准做法
while ((strLine = br.readLine()) != null) { System.out.println (strLine); } |
23
phpcyy 2019-03-11 14:00:48 +08:00
golang 里边好像不是这样的
|
24
grewer 2019-03-11 14:00:58 +08:00
你也网上🏄啊
|
25
gamexg 2019-03-11 14:17:01 +08:00
c 里面容易出的一个错误
if (i=1){ } 条件永远成立,所以后来出现另一种写法: if (1==i){ } 来解决误写的问题 |
26
ExploreWay 2019-03-11 14:45:47 +08:00
哇,了解了,第一次看到,不过这种操作知识特殊一些,实际用途大吗
|
28
tabris17 2019-03-11 14:50:47 +08:00
不同的语言不一样
另外:1L+1 |
29
dosmlp 2019-03-11 15:18:37 +08:00
作为 c++程序员,这是常识吧,操作符也是函数的一种
|
30
darknoll 2019-03-11 15:19:27 +08:00 1
什么叫赋值语句的返回值,语句哪有什么返回值,这是表达式的值
|
32
jswh 2019-03-11 15:52:22 +08:00
不是所有语言的复制语句都有返回值。
|
34
chiu 2019-03-11 16:13:36 +08:00 via Android
写错过 if(i=1),但程序还能跑,应该就知道赋值语句是有返回值的了
|
35
masker 2019-03-11 16:15:13 +08:00 via Android
“我读了 Google 工具类的代码,好像发现一个不得了的事情,赶紧上 V2EX 炫一下我读了 Google 工具类的代码”
|
36
carlclone 2019-03-11 17:01:13 +08:00
所以赋值不该有返回值 , 就不会出现少写个=号出 bug 的问题了
|
37
Joyboo 2019-03-11 17:07:40 +08:00
1L +1 常识问题
|
38
MrUser 2019-03-11 17:22:35 +08:00
心疼 LZ 一秒,LZ 只是好心科谱一下,哈哈
|
39
Death 2019-03-11 18:03:24 +08:00
大多数语言的 spec 里会给出语句是否是一个值的说明
|
40
hirasawayui 2019-03-11 23:20:44 +08:00
你以为自己发现了新大陆,谁知道。。。是辆公交车
|
41
Arxz 2019-03-12 06:24:43 +08:00
区分 expression 和 statement 不是基础吗
|