system.out.println(“”)更改程序的行为

ruoxqz4g  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(220)

这个问题在这里已经有答案了

如果没有print语句,循环看不到其他线程更改的值(1个答案)
与system.out[duplicate](3个答案)关联的java线程的奇怪行为
上个月关门了。
我有以下代码:

boolean running = true;
        while (running) {
            MathStackJPanel focused = Main.frame.mainPanel.focused;
            //System.out.print("");
            if (focused != null) {
                Point p = focused.getMousePosition();
                ExpressionComponent ep = focused.getUnderPoint(p);
            }
        }
``` `focused.getUnderPoint(p)` 应该打印某些内容(用于调试),但不打印。我一取消注解 `System.out.print("")` ,代码按预期工作,我在控制台中看到打印的内容(从 `focused.getUnderPoint(p)` ). 为什么这行简单的代码实际上什么也不做,却完全改变了代码的行为?另外,我可以看出while循环中的代码根本没有运行,因为当我取消注解时 `System.out.print("")` 在特定场景中会抛出异常(如预期的那样)。
java是否优化了我的while循环(即使它不应该优化)?
有人想举个更好的例子:

public static Object b = null;

public static void a() {
    System.out.println("OK");
}

public static void main(String[] args) {
    Thread thread = new Thread(() -> {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        b = 4;
    });

    thread.start();

    while (true) {
        //System.out.print("");
        if (b != null) {
            a();
        }
    }
}
取消对行的注解以使其工作(打印正常)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题