Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_Android_Methods - Fatal编程技术网

Java方法-返回的实际含义是什么?

Java方法-返回的实际含义是什么?,java,android,methods,Java,Android,Methods,我很确定我错过了一些非常明显的东西,但这似乎很奇怪 我正在使用Eclipse为Android开发—我有一个类似于我正在调试的方法,它正在做一些非常奇怪的事情 public boolean test() { if (variable == value) return true; // more code appears here return false; } 在第一行(if语句)上,调试器建议变量的值确实相等(两个字节变量的值都为0)-调试器然后移到第

我很确定我错过了一些非常明显的东西,但这似乎很奇怪

我正在使用Eclipse为Android开发—我有一个类似于我正在调试的方法,它正在做一些非常奇怪的事情

public boolean test() {
    if (variable == value) 
        return true;
    // more code appears here
    return false;
}
在第一行(if语句)上,调试器建议变量的值确实相等(两个字节变量的值都为0)-调试器然后移到第二行(返回true),但随后移到最后一行(返回false)-跳过中间的所有内容

返回的值为“false”

WTF在那里进行什么?我假设RETURN将完全退出该方法-但是调试器(返回值被发送回来-为false)表明它不会执行类似的操作

我错过了什么,正盯着我的脸?返回语句作为方法的最后一行总是被执行吗

p、 有趣的更新

我使用的变量是在我没有编写的代码中分配的——我只是挖掘了源代码,重新构建/重新运行了调试器,并访问了该源代码,我在其中找到了这一行

byte variable = (byte)9;
你能看出这有什么问题吗?你认为这能解释问题吗!?我已经给作者发了电子邮件,但与此同时

更新2

好的,我已经完全重新制作了这个项目,清理并重建了它,卸载并重新安装到手机中,调试器现在的行为更加合理

问题显然是“9”的使用(它们使用0-9作为字节中的可能值!!)-现在发生的是,尽管调试器建议“variable”为“0”-它也无法与(byte)0进行比较,因此我得到了一个“false”返回值-这实际上是正确的

很明显,在他们将代码更改为使用简短的答案之前,我一直都很困惑,因为“重建所有内容”的答案和“使用(字节)或字节值()进行比较”的答案在某种程度上都是正确的

返回语句是否始终作为方法的最后一行执行 什么

没有

尝试在
{}
中包围if块,然后看看会发生什么

返回语句是否始终作为方法的最后一行执行 什么

没有


尝试在
{}
中包围if块,然后看看会发生什么。

如果它们是分配了new的字节对象,那么==将测试它们是否是内存中的同一对象,并返回false。尝试使用:

variable.byteValue() == value.byteValue()

相反。

如果它们是用new分配的字节对象,则==将测试它们是否是内存中的同一对象,并返回false。尝试使用:

variable.byteValue() == value.byteValue()

相反。

您对代码的描述与粘贴的代码不匹配。我怀疑这是真正问题的一个症状:您正在单步执行与编译代码不同的源代码。行号不匹配。看起来它在做各种古怪的事情。重新编译代码并再次调试。

您对代码的描述与粘贴的代码不匹配。我怀疑这是真正问题的一个症状:您正在单步执行与编译代码不同的源代码。行号不匹配。看起来它在做各种古怪的事情。重新编译代码并再次调试。

我认为您的问题在于,当您使用Byte对象时,执行==并不是比较字节的值,而是比较内存中的对象。这类似于

相反,请尝试:

public boolean test() { 
    if (variable.equals(value))  
        return true; 
    // more code appears here 
    return false; 
} 
根据评论进行更新

如果要比较两个字节(特别是一个变量和一个值),请确保在两个值上都强制转换为一个字节(请参阅原因)。因此,请尝试:

public boolean test() {     
    if ((byte)variable == (byte)value)      
        return true;     
    // more code appears here     
    return false;     
}   

我认为您的问题是,当您使用Byte对象时,执行==并不是比较字节的值,而是比较内存中的对象。这类似于

相反,请尝试:

public boolean test() { 
    if (variable.equals(value))  
        return true; 
    // more code appears here 
    return false; 
} 
根据评论进行更新

如果要比较两个字节(特别是一个变量和一个值),请确保在两个值上都强制转换为一个字节(请参阅原因)。因此,请尝试:

public boolean test() {     
    if ((byte)variable == (byte)value)      
        return true;     
    // more code appears here     
    return false;     
}   

从逻辑上讲,return语句确实会立即退出方法--

但在此之前,可能会发生其他事情,比如在封闭的try块之后出现finally语句

通常,调试器会跳到return语句之后的方法的右大括号,而不是最后一个return语句


这让我觉得您的方法有些不寻常,或者您在调试器中看到的方法与设备上运行的方法不同。

从逻辑上讲,return语句确实会立即退出方法--

但在此之前,可能会发生其他事情,比如在封闭的try块之后出现finally语句

通常,调试器会跳到return语句之后的方法的右大括号,而不是最后一个return语句


这让我觉得您的方法有点不寻常,或者您在调试器中看到的方法与设备上运行的方法不同。

它不应该这样做,而且您对return的了解已经是正确的


当编译的二进制文件与源代码不同时,可能会发生这种情况。尝试清理项目并重建它。

它不应该这样做,而且您对return的了解已经是正确的


当编译的二进制文件与源代码不同时,可能会发生这种情况。尝试清理并重建项目。

我认为eclipse中的代码缓冲区与正在调试的代码缓冲区不匹配。您应该看到代码在返回语句之后执行的唯一时间是您正在使用finally块,在该块中,您将看到代码在调试器中返回语句之后的finally块中执行。

我不认为eclipse I中的代码缓冲区