Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对空对象意外行为的Java检查_Java_Debugging_Logic - Fatal编程技术网

针对空对象意外行为的Java检查

针对空对象意外行为的Java检查,java,debugging,logic,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 =

我试图理解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”检查status的值,如果为true,我希望交换值

但是,当status等于“IN”时,代码不会执行(我正在使用Eclipse调试器进行验证,我观察status的值,它是“IN”,我在任何地方都设置了断点,它完全跳过if语句的内部)

我不明白发生了什么事。我将尝试附加调试过程的图像,以显示当status为“IN”时会发生什么,以及它如何完全跳过if子句

会发生什么?我最初有--if(t!=null&&status==“IN”),但注意到了这种行为,所以我拆分了if语句,没有任何帮助

状态检查、调试值 此图显示执行if语句时的状态值。在它周围设置断点,并且应该执行if语句中的代码(将status的值从“IN”更改为“OUT”)

状态检查,不可能值 此图显示调试器跳转到的行(似乎)不可能的status值(不是跳入if语句,而是跳转到if语句之后)。在这种情况下,t不为null,status等于“In”,因此if语句中的代码应该将status的值更改为“OUT”,但在断点处仍然设置为“In”


比较字符串时始终使用.equals

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

看看这是否有帮助:)

在比较字符串时始终使用.equals

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

看看这是否有帮助:)

在比较字符串时始终使用.equals

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

看看这是否有帮助:)

在比较字符串时始终使用.equals

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

看看这是否有帮助:)

==
因为java中的字符串并不像您想象的那样工作;)改用
.equals()
。这样就可以了,谢谢。我知道字符串是对象,就像java中的大多数东西一样,我使用“==”来避免空引用异常。我只需要先添加null检查。
==
在java中对字符串的检查并不像您想象的那样;)改用
.equals()
。这样就可以了,谢谢。我知道字符串是对象,就像java中的大多数东西一样,我使用“==”来避免空引用异常。我只需要先添加null检查。
==
在java中对字符串的检查并不像您想象的那样;)改用
.equals()
。这样就可以了,谢谢。我知道字符串是对象,就像java中的大多数东西一样,我使用“==”来避免空引用异常。我只需要先添加null检查。
==
在java中对字符串的检查并不像您想象的那样;)改用
.equals()
。这样就可以了,谢谢。我知道字符串是对象,就像java中的大多数东西一样,我使用“==”来避免空引用异常。我只需要先添加null检查。你是对的,但只是为了给你的答案提供一些背景信息:OP应该使用
equals
的原因是,在Java中,字符串存储为对象,
=
操作符比较对象引用而不是它们的值<另一方面,code>equals是用于比较
String
对象值的方法。此解决方案允许我避免检查状态是否为null(status.equals(“IN”)可能会抛出null)。谢谢。大家注意到:)这就是我把它放在这个例子中的原因。你是对的,但只是为你的答案提供了一些背景知识:OP应该使用
等于
的原因是,在Java中,字符串存储为对象,
=
操作符比较对象引用而不是它们的值<另一方面,code>equals
是用于比较
String
对象值的方法。此解决方案允许我避免检查状态是否为null(status.equals(“IN”)可能会抛出null)。谢谢。大家注意到:)这就是我把它放在这个例子中的原因。你是对的,但只是为你的答案提供了一些背景知识:OP应该使用
等于
的原因是,在Java中,字符串存储为对象,
=
操作符比较对象引用而不是它们的值<另一方面,code>equals
是用于比较
String
对象值的方法。此解决方案允许我避免检查状态是否为null(status.equals(“IN”)可能会抛出null)。谢谢。大家注意到:)这就是我把它放在这个例子中的原因。你是对的,但只是为你的答案提供了一些背景知识:OP应该使用
等于
的原因是,在Java中,字符串存储为对象,
=
操作符比较对象引用而不是它们的值<另一方面,code>equals
是用于比较
String
对象值的方法。此解决方案允许我避免检查状态是否为null(status.equals(“IN”)可能会抛出null)。这就是为什么我把它放在这个例子中。