有没有办法强制java测试两个条件,无论第一个条件?

use*_*903 31 java if-statement

让我说我有一个声明

if(stack.pop() == 1 && stack.pop() == 1)
Run Code Online (Sandbox Code Playgroud)

如果堆栈顶部为0,则不会实现第二个条件,这意味着它只会在顶部弹出一个值.我想要的是弹出顶部和顶部之后的值.如果不使用其他if-else语句,有没有办法做到这一点?

JB *_*zet 101

int first = stack.pop();
int second = stack.pop();
if (first == 1 && second == 1)
Run Code Online (Sandbox Code Playgroud)

  • 我最喜欢这个,因为它清楚地告诉读者有两个值被弹出. (4认同)
  • 这是我能想到的最简单的方式(虽然喜欢其他人提出的&运营商的力量).这个至少可以确保非评论读者会破坏代码. (3认同)
  • @ErwinSmout大声笑`poop()` (2认同)
  • 狗屎...一个错字 (2认同)

dav*_*tto 45

使用bitwise AND operator**:

if( stack.pop() == 1 & stack.pop() == 1 )
Run Code Online (Sandbox Code Playgroud)

这将迫使双方进行评估.

**我通过逻辑AND的"非短路"知道它,但它确实是一个按位操作符,它作用于布尔操作数(这里的文档).

更新:正如JBNizet在下面的评论中所说,这段代码是"脆弱的",因为一些开发人员可能会"纠正"运营商的短路版本.如果你选择使用&而不是存储方法调用的值(强制它们运行)同样JBNizet回答,你应该在if语句之前写一个注释.

  • 那非常脆弱.它正在等待团队中的另一个开发人员,或者甚至是几天后自己将&更改为&&因为使用非短路二进制运算符而不是短路布尔运算符看起来很奇怪.在条件测试中使用具有副作用的方法不是我推荐的. (29认同)
  • @Ryven:我没有投票.我刚才评论了这个答案的脆弱性,因为我认为向OP和未来的读者发出警告非常重要. (5认同)
  • 当与布尔值一起使用时,它不是一个*位*运算符,它只是一个非短路逻辑运算符. (4认同)
  • @JBNizet他没有说这是个好主意. (2认同)