在Java中将整数视为布尔值

在Java中将整数视为布尔值,java,boolean,Java,Boolean,我正在更新一个旧的Java应用程序,以便在现代操作系统上工作,我遇到了一个我无法理解的错误。我对java没有多少经验,但是从我读到的,你不能像C++那样存储布尔值在一个整数(1或0)中。 以下是错误所在的代码位: public static double a(cr paramcr, int paramInt) { double d = 0.0D; int i = ++b; if (b <= l.length()) { if (paramInt <

我正在更新一个旧的Java应用程序,以便在现代操作系统上工作,我遇到了一个我无法理解的错误。我对java没有多少经验,但是从我读到的,你不能像C++那样存储布尔值在一个整数(1或0)中。 以下是错误所在的代码位:

  public static double a(cr paramcr, int paramInt) {
    double d = 0.0D;
    int i = ++b;
    if (b <= l.length()) {
      if (paramInt < 0) {
        int j = b; // <----------- defined again as an integer.
        d = e();
        if (e == true && d >= h && d + f - g >= 1.0D && d + f - g <= d) {
          String str1 = String.valueOf((int)d);
          d = d + f - g;
          String str2 = String.valueOf((int)d);
          l = a(j, l, str1, str2, i);
        } else if (j == false) { // <---------------------------- error
          if (((d < 1.0D || d > d) ? false : true) == false)
            c = 7; 
        }
变量j在程序顶部被定义为一个静态布尔值,但后来在这个“a”类中被重新定义为一个整数。我注意到,在这个类中,还有其他整数变量被用来与true和false语句进行比较,但是为了得到true或false结果,它们都被与某些条件进行比较。这里的情况显然不是这样,我的问题是,如果这个程序是这样写的,我想不出在过去这个程序有什么功能。有什么想法可以解释为什么会这样,或者对我的下一步行动有什么建议吗


所有这些都没有任何文档或直观的变量名,这没有帮助。

在Java中,不能将
int
视为
布尔值。句号

我收到了一些文件,他们告诉我这些文件包含源代码。事实并非如此。然后我被告知反编译它

您看到的显然是一些从“.class”文件反编译的代码。反编译不能保证生成有效(可编译)的Java源代码。在这种情况下,它似乎没有。事实上,该代码中有暗示原始字节码被混淆的线索。。。故意使反编译器难以生成可读/有效的Java源代码

(问题是,相同的字节码用于处理
布尔型
和小于等于
int
的整数类型。在这种情况下,反编译器假设局部变量是
int
,但无法判断其假设是否不正确。更好的反编译器可能能够判断出来……)

因此,您需要做的是找出如何修改(不是真正的Java)代码,使其1)可编译,2)做正确的事情1

所有这些都没有任何文档或直观的变量名,这是没有帮助的

嗯。。。当您尝试使用反编译代码时会发生这种情况。所有局部变量名和注释(包括javadocs)都被编译器丢弃,反编译器无法重建它们

另一种选择是回到那些应该给你源代码的人那里,让他们提供给你。。。真的



1-这假设您可以了解此方法真正应该做什么。我想我们帮不了你。首先,可能需要读取反汇编的字节码,以了解代码的真正功能。

在Java中,不能将
int
视为
布尔值。句号

我收到了一些文件,他们告诉我这些文件包含源代码。事实并非如此。然后我被告知反编译它

您看到的显然是一些从“.class”文件反编译的代码。反编译不能保证生成有效(可编译)的Java源代码。在这种情况下,它似乎没有。事实上,该代码中有暗示原始字节码被混淆的线索。。。故意使反编译器难以生成可读/有效的Java源代码

(问题是,相同的字节码用于处理
布尔型
和小于等于
int
的整数类型。在这种情况下,反编译器假设局部变量是
int
,但无法判断其假设是否不正确。更好的反编译器可能能够判断出来……)

因此,您需要做的是找出如何修改(不是真正的Java)代码,使其1)可编译,2)做正确的事情1

所有这些都没有任何文档或直观的变量名,这是没有帮助的

嗯。。。当您尝试使用反编译代码时会发生这种情况。所有局部变量名和注释(包括javadocs)都被编译器丢弃,反编译器无法重建它们

另一种选择是回到那些应该给你源代码的人那里,让他们提供给你。。。真的



1-这假设您可以了解此方法真正应该做什么。我想我们帮不了你。首先,可能需要读取反汇编的字节码,以了解代码的真正功能。

这就是您得到的错误?你没有声明变量e,但你使用它。我很惊讶这个位不会导致错误:e==true,因为e@Stultuske对不起,e也是一个在文件顶部定义的静态布尔值,它只是一个很长的文件。这是反编译的模糊代码吗?因为这可以解释为什么你会得到语法错误的代码。这也解释了文档的缺乏,变量名的奇怪,以及你遇到的问题。如果(j==false)而j是int,你怎么会认为这会很好?这就是你得到的错误?你没有声明变量e,但你使用它。我很惊讶这个位不会导致错误:e==true,因为e@Stultuske对不起,e也是一个在文件顶部定义的静态布尔值,它只是一个很长的文件。这是反编译的模糊代码吗?因为这可以解释为什么你会得到语法错误的代码。它还可以解释缺少文档、奇怪的变量名以及您遇到的问题。如果(j==false),而j是int。您认为这会怎么样?这是模糊代码,而不仅仅是反编译代码。如果可能的话,这意味着在反编译时提供语法无效的源代码。山姆基本上是这里的(非常不走运的)黑帽子。我想穿上这件衣服是件好事
The operator == is undefined for the argument type(s) int, boolean