Java方法 - RETURN实际意味着什么?

1 java methods android

我很确定我错过了一些非常明显的东西,但这看起来很奇怪.

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

public boolean test() {
    if (variable == value) 
        return true;
    // more code appears here
    return false;
}
Run Code Online (Sandbox Code Playgroud)

单步执行,在第一行(if语句)上,调试器建议变量确实等于值(它们都是两个字节变量,值为0) - 调试器然后移动到第二行(返回true)但是然后它移动到最后一行(返回false) - 跳过中间的所有内容!?

返回的值是'false'

WTF正在那里?我假设RETURN将完全退出该方法 - 但调试器(以及返回的返回值 - 为false)表明它没有做任何类型的事情!?

我错过了什么盯着我的脸?返回语句是最后一行方法总是执行还是什么?

ps有趣的更新......

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

byte variable = (byte)9;
Run Code Online (Sandbox Code Playgroud)

你能看到有什么不妥吗?这或许可以解释你认为的问题!?我通过电子邮件发送了作者,但同时 - 嗯....

UPDATE2

好的,我已经完全重新制作了项目,清理并重建了它,卸载并重新安装到手机中,调试器现在表现得更加明智......

问题显然是'9'的使用(他们在一个字节中使用0-9作为可能的值!!) - 现在发生的事情是虽然调试器建议'变量'为"0" - 但它也没有与之比较(字节)0因此我得到一个'假'返回 - 这实际上是正确的.

我显然被困住了,直到他们改变他们的代码以使用短 - 接受一个答案,它是棘手的,因为'重建一切'答案和'比较使用(字节)或字节值()'答案是正确的!?

Tud*_*dor 7

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

variable.byteValue() == value.byteValue()
Run Code Online (Sandbox Code Playgroud)

代替.


Jas*_*Cav 6

我认为你的问题在于,当你使用Byte对象时,执行==不是比较字节的VALUES,而是比较内存中的对象.这与String的工作方式类似.

相反,尝试:

public boolean test() { 
    if (variable.equals(value))  
        return true; 
    // more code appears here 
    return false; 
} 
Run Code Online (Sandbox Code Playgroud)

根据评论更新

如果要比较两个字节(特别是变量和值),请确保在两个值上都转换为字节(有关原因,请参阅二进制数字促销).所以,试试:

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