Java检查空对象意外行为

时间:2014-10-13 15:28:24

标签: java debugging logic

我试图理解我的Java代码中的一些意外行为。

以下是代码:

TimeclockEntry t = db.getLastTimeclockEntryByEmployee(Integer.parseInt(employee));
String status = (t==null?"IN":t.getStatus());
if (operation != null)
    confirmation = getString(R.string.ttsJobIn);
else
    confirmation = getString(R.string.ttsClockIn);
if(t!=null) {
    if(status=="IN") {
        status = "OUT";
        in = "false";
        if (operation != null)
            confirmation = getString(R.string.ttsJobOut);
        else
            confirmation = getString(R.string.ttsClockOut);
    }
}
db.addTimeclockEntry(new TimeclockEntry(Integer.valueOf(employee), now, status));

变量" status"保存用户状态的文本表示。我在这个逻辑中所做的就是交换,用于自动超时功能(因此IN变为OUT,反之亦然)。在这里,我正在检查状态的值对" IN",当为true时,我想做交换值。

但是,当状态等于" IN"时,代码不会执行(我正在使用Eclipse调试器进行验证,我会看到状态的值,它" IN& #34;,我在任何地方设置断点,它完全跳过if语句的内部。)

我无法理解发生了什么。我将尝试附加调试过程的图像,以显示当状态为" IN"时它会如何完全跳过if子句。

可能会发生什么?我最初有 - 如果(t!= null&& status ==" IN")但注意到这种行为,所以我拆分了if语句,无论如何都没有帮助。

状态检查,调试值

此图像显示if语句时的状态值。断点在它周围设置,if语句中的代码应该执行(将状态值从" IN"改为" OUT")。

http://i.stack.imgur.com/oVy9Z.png

状态检查,不可能的值

此图像显示调试器跳转到的行(看似)不可能的状态值(而不是进入if语句,它跳过if语句)。在这种情况下,t不为空且状态等于" IN",因此if语句中的代码应将状态值更改为" OUT",但它仍设置为" IN"在断点处。

http://i.stack.imgur.com/PdDz3.png

1 个答案:

答案 0 :(得分:3)

比较字符串时总是使用.equals

if("IN".equals(status)) {

看看是否有帮助:)