V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX  ›  程序员

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

  •  
  •   rizon ·
    othorizon · 2019-01-28 20:40:12 +08:00 · 3653 次点击
    这是一个创建于 2159 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    是这样的感觉嘛?但变量依旧是提前申明的。
    xuanbg
        5
    xuanbg  
       2019-01-28 21:15:12 +08:00
    这种写法没有任何意义呀
    mangodai
        6
    mangodai  
       2019-01-28 22:26:36 +08:00
    @laxenade 估计他说的是这个,7 特性而已
    FInt1620
        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
        8
    mmdsun  
       2019-01-29 07:59:16 +08:00 via Android
    try 可以。
    try ( Connection connection = factory.newConnection();
    Channel channel = connection.createChannel() ) {

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

    String line;

    while ((line = in.nextLine()) == null) {
    // balabalabala
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3619 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:27 · PVG 12:27 · LAX 20:27 · JFK 23:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.