Java 在某种情况下支持 if 语句块中声明变量?

2019-01-28 20:40:12 +08:00
 rizon

很早以前的时候看一个开源代码的时候,隐约记得其中有一个代码是在 if 块中声明的变量,但是我忘了那个代码是什么了,试着找过也没找到,自己查了写资料也没找到什么情况下是可以这样写的。

难道是我的记忆出现偏差了? 这事总会偶尔想起来,百思不解,所以这次决定问问 v 社的大佬们知道有没有这种写法了,不知道是不是新版 jdk 的特性,还是啥玩意。

隐约记得就是下面这种写法

if ((String str = "as") == "12") {
System.out.println(str);
}

再或者,,莫非当时看的不是 java 代码?因为这事很早以前的,确实记忆很模糊了。

3512 次点击
所在节点    程序员
10 条回复
MonoLogueChi
2019-01-28 20:41:59 +08:00
C#是有这种写法,Java 不清楚有没有这种语法糖
laxenade
2019-01-28 20:43:58 +08:00
if 里只能赋值不能定义,或者其实你想的是 try()?
oovveeaarr
2019-01-28 20:46:07 +08:00
我记得很久以前的 Java 并不支持这种操作也
gam2046
2019-01-28 21:00:41 +08:00
int len;
while( -1 != (len=inputstream.read())){
// do something
}

是这样的感觉嘛?但变量依旧是提前申明的。
xuanbg
2019-01-28 21:15:12 +08:00
这种写法没有任何意义呀
mangodai
2019-01-28 22:26:36 +08:00
@laxenade 估计他说的是这个,7 特性而已
FInt1620
2019-01-28 23:34:22 +08:00
public class Test {
int a = 0;
boolean status() {
a += 1;
return true;
}
public static void main(String[] args) {
Test test = new Test();
if (test.status())
System.out.println("true");
}
}
上面的 if 语句也可以表示成:
if ((test.a += 1) == 1)
System.out.println("true");
但不能在 if 语句内部声明变量。
mmdsun
2019-01-29 07:59:16 +08:00
try 可以。
try ( Connection connection = factory.newConnection();
Channel channel = connection.createChannel() ) {

}
araraloren
2019-01-29 09:00:52 +08:00
C 里面是支持的 是不是你看错了。。
zpf124
2019-01-29 09:30:03 +08:00
应该是记忆出偏差了了吧。
在 io 处理得时候经常会在 for 或者 while 语句里给变量赋值,但定义还是得放在外面的。

String line;

while ((line = in.nextLine()) == null) {
// balabalabala
}

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

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

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

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

© 2021 V2EX