java - 为什么不能在堆栈的 add() 内执行 pop()

标签 java

我为 boolean 表达式编写了一个后缀计算器,因为它是后缀形式的。我第一次写它时,我使用了这个表达

s.add(s.pop() [operation] s.pop());

其中 s 是我的堆栈,操作andxoror.

由于某种原因,pop 方法似乎没有从堆栈中剥离值,因此我改用两个 boolean 变量重写此操作:b1b2。这些变量包含弹出的值,然后通过正确的操作通过 add 方法传递这些值。

if(str.equals("or")){
    boolean b1 = s.pop();
    boolean b2 = s.pop();
    s.add(b1 || b2);
    //out.println(s);
}

为什么我不能使用提到的第一个语句?

最佳答案

从我的评论中复制,因为它现在被认为是一个答案:

当使用 || 且左侧值为 true 时(当左侧 s.pop() 返回 true 时会发生这种情况),右侧不被评估。当右侧是诸如 s.pop() 之类的方法调用时,由于未调用 pop() ,因此会导致值保留在堆栈上。

省略对不需要的值的评估(这就是这里发生的情况)称为短路。如果您想了解更多信息:Java logical operator short-circuiting

关于java - 为什么不能在堆栈的 add() 内执行 pop(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250220/

相关文章:

java.lang.NoClassDefFoundError : Could not initialize class com. hp.hpl.jena.query.Query

java - 如何知道SCM中哪些Maven模块被更改?

java - Whitespace Surround Android 相机预览

java - Pyspark 中的广播加入得到 OnOutOfMemoryError

java - jDialog 未显示

java - 数组、算法和元素

java - WebService返回403码时如何获取CXF中的HTTP响应体?

java - 如何在 javafx2 中使用 FXML 创建滚动条?

java - 使代码可测试的首选方法:依赖注入(inject)与封装

java - 如何在 Java 中将字符串插入二维字符串数组?