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

时间:2018-05-16 09:25:49

标签: java bluej

(抬头,我从来没有写过一个合适的节目,所以请耐心等待我)

我试图编写一个if语句来比较两个实例的position字段的值(字面上返回整数" position")。问题是,它们是不同类中的私有字段,因此我无法直接访问它们。相反,我在每个类中创建了返回变量的方法。

现在在我的if语句中,这是条件是真/假:

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

现在的问题是,如果我使用=,机器会假设我尝试为enemy1的位置分配一个值,而我一直在研究如何{ {1}}比较内存位置而不是两个字段的值。

我也读过那个

==

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

.equals()

在我尝试时出错。

注意:我无法将字段更改为公开字段,因为这是针对作业的,而字段必须是私有的。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

你有没有试过==

如果真的要退出一个整数,那么==就是要走的路。

你不能在诸如int,char,double,float,long,short,byte之类的原语上调用函数。所以没有.equals()来调用。

对于类,你需要调用.equals(),因为类变量就像一个指针,所以你不想用==比较两个指针。但是,原始变量只包含它们的“值”,因此==非常适合比较值。

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

试试吧。

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()))

OR

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

应该可以正常工作。

答案 1 :(得分:0)

我将简要介绍一下比较。

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

2)对于像Integer这样的基元对象,Double仍然将内存位置与==运算符进行比较。你需要调用他们的.equals来比较它们。如果你有自己的类,你需要定义自己的equals方法版本,意味着覆盖。