(Java) 在 if 语句中比较两个变量的值但不能使用 `.equals()`

(Java) Comparing values of two variables in if-statement but can't use `.equals()`

(注意,我之前从未编写过合适的程序,所以请多多包涵)

我正在尝试编写一个 if 语句来比较两个实例的 position 字段的值(字面上 return 是整数 "position")。问题是,它们是不同 classes 中的私有字段,所以我无法直接访问它们。相反,我在每个 class 中创建了方法,其中 return 变量。

现在在我的 if 语句中,这是 true/false:

的条件

if (enemy1.getPosition() = player.getGun1Position())

现在的问题是,如果我使用 =,机器会假设我正在尝试为 enemy1 的位置赋值,并且我一直在研究发现 == 比较内存位置而不是两个字段的值。

我也看过

.equals()

可以使用,但我假设它不能在这里使用,因为

enemy1.getPosition().equals(player.getGun1Position())

尝试时出现错误。

注意: 我无法将字段更改为 public,因为这是一项作业,字段需要是私有的。

任何帮助将不胜感激:)

您尝试过 == 了吗?

如果它真的要淘汰一个整数,那么 == 是可行的方法。

您不能在 int、char、double、float、long、short、byte 等基元上调用函数。所以没有 .equals() 可以调用。

在classes的情况下,你需要调用.equals(),因为class变量就像一个指针,所以你不想比较两个指针其他 ==。但是,原始变量只包含它们的 "values",因此 == 非常适合比较值。

如果您还没有尝试过,则需要对您的编码进行更多实验。

测试一下。

System.out.println(enemy1.getPosition()+" == "+ player.getGun1Position()+":  "+(enemy1.getPosition()==player.getGun1Position()));

if(enemy1.getPosition()==player.getGun1Position())
{
//blah
}

如果这不起作用,则您返回的不是 int 原语,而是 Integer 对象(注意大写 I)。

在这种情况下,

if(enemy1.getPosition().equals(player.getGun1Position()))

if(enemy1.getPosition().getIntValue()==player.getGun1Position().getIntValue()))

应该可以正常工作。

我将简要介绍一下比较。

1) 基元只需要 == 运算符来匹配值,除非不是允许的字符串值将比较它们的内存位置。对于字符串使用 .equals().

2) 对于像Integer这样的原始类型的对象,Double还是会用==运算符来比较内存位置。您需要调用它们的 .equals 来比较它们。如果你有自己的 class 你需要定义你自己的 equals 方法版本,意味着覆盖。