Java 库为什么要这么写?

2021-10-25 21:37:22 +08:00
 monster1priest
我一般都是
int a = getNumber(); if(a >0)…….
但是我看到源码写法很多是
int a; if((a=getNumber()) >0)…….
为什么会这么写?是有什么好处吗
7470 次点击
所在节点    Java
50 条回复
littlewing
2021-10-26 19:44:56 +08:00
羡慕 Java ,能看懂 标准库的代码,最新学 C++,STL 不是人看的
rrfeng
2021-10-26 19:52:38 +08:00
@yuchting
你们最讨厌的 go 也支持
iceheart
2021-10-26 20:21:55 +08:00
C 代码转过来的吧,直接用了,省事
eason1874
2021-10-26 20:39:45 +08:00
@yuchting #32 PHP 很多就这么写的,不用提前声明变量 $a ,直接在条件判断里赋值运算,某些场景能省不少 if 嵌套

if (isOk() && ($a = getNumber()) > 0 && $a < 10) echo $a;
someonedeng
2021-10-27 00:45:55 +08:00
c 语言留下的习惯,个人感觉不好看
fuchaofather
2021-10-27 10:07:18 +08:00
c 味儿
GiftedJarvis
2021-10-27 14:25:16 +08:00
我也有这疑问, 不光 HashMap, 还有一堆 BlockQueue, AQS 里都这么写
yolee599
2021-10-27 17:49:00 +08:00
@skinny #25 对于 C 语言,这样写不是不良习惯,反而是好习惯,因为有的编译器不支持以下语法:

for (int i = 0; i < 10; i++)
{
...
}

要改成下面的写法才能编译通过:

int i;
for (i = 0; i < 10; i++)
{
...
}

为了兼容所有的编译器所以使用第二种写法,还有的编译器定义变量的时候不能在函数中间定义,必须在函数最前面定义。
yolee599
2021-10-27 17:52:25 +08:00
@yolee599 #48 第一种写法是 C99 的语法,很多编译器是不支持 C99 语法的。有时候编译器支持 C99 也不会特意去开启 C99 ,都是为了兼容😂
skinny
2021-10-27 20:03:38 +08:00
@yolee599 你没明白我的意思

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

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

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

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

© 2021 V2EX