java - Java 中为 boolean 变量赋值与赋值比较结果之间的区别

标签 java boolean variable-assignment

我的同事传给我一些代码,我运行代码时出现问题。这是其中的一部分

boolean purchased = false;
conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
stmt = conn.createStatement();
String sql = new StringBuilder().... // some query

rs = stmt.executeQuery(sql);
while (rs.next()) {
    //some code
    purchased = rs.getInt("purchased") == 1;
    print(" purchased:" + purchased);
}

这总是将购买打印为错误。我将该部分更改为:

while (rs.next()) {
    //some code
    if(rs.getInt("purchased") == 1) purchased = true;
    print(" purchased:" + purchased);
}

现在一切正常了。

注意:我的结果集只能有 1 条记录。而DB中purchasedbit类型,所以除了0/1之外不能有其他值。

这两种写法有什么区别?据我所知,两者应该以相同的方式工作。

最佳答案

What is the difference between those two ways of writing ? as I know both should work the same way.

不,绝对不是。在你的第一段代码中,如果 rs.getInt("purchased")返回 1 以外的值,您指定值 false .

在你的第二段代码中,一次 purchased已设置为true ,它保持true循环的其余部分。

假设您的第一行 purchased 的值为 1 ,并且第二行的值为 2,那么在第一段代码中该变量将变为 true然后false ,但在第二段代码中,变量将设置为 true在第一次迭代中,然后在第二次迭代中保持不变。

关于java - Java 中为 boolean 变量赋值与赋值比较结果之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34431891/

相关文章:

ios - 如何让 NSJSONSerialization 将 boolean 值输出为真或假?

c++ - 为什么我不能在赋值的右侧放置一个指向 const 的指针?

javascript - 多重赋值 var a = b = b || {} 在 javascript 中

java - export JAVA_OPTS =""参数放在哪个文件?

java - 从另一个项目调用 JDialog?

java - 如何在JAVA中初始化带有特殊字符 `\`的字符串?

ruby-on-rails - 如何对三元运算符使用多重赋值?

java - 当我尝试将 BufferedReader 中的字符串放入字符串数组时出现 NullPointer 异常

JAVA - boolean 修正 - 按“播放”时仍然继续

python - 使用 flask 返回 bool 作为 POST 响应