【问题标题】:(Java) Comparing values of two variables in if-statement but can't use `.equals()`(Java) 在 if 语句中比较两个变量的值但不能使用 `.equals()`
【发布时间】:2018-05-16 09:25:49
【问题描述】:

(请注意,我之前从未编写过合适的程序,请耐心等待)

我正在尝试编写一个 if 语句来比较两个实例的 position 字段的值(它实际上返回整数“位置”)。问题是,它们是不同类的私有字段,所以我不能直接访问它们。相反,我在每个类中创建了返回变量的方法。

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

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

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

我也看过

.equals()

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

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

尝试时出错。

注意:我无法将字段更改为公开,因为这是用于分配,并且字段必须是私有的。

任何帮助将不胜感激:)

【问题讨论】:

  • position是什么类型?
  • 您返回的是int 还是Integer
  • 如果getPosition() 返回某种对象(例如Integer),请使用.equals。如果返回基本类型(如intdouble),则使用==
  • equals() 尝试时会出现什么错误?
  • 还要进一步阐述khelwood所说的:如果你想比较两个自定义类,你需要@Overrideequals方法并用你的自定义逻辑填充它以进行比较。如果您不这样做,则与使用== 进行比较相同。

标签: java bluej


【解决方案1】:

我将简要介绍一下比较。

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

2) 对于像 Integer 这样的基元对象,Double 仍然使用 == 运算符比较内存位置。您需要调用它们的 .equals 来比较它们。如果您有自己的类,则需要定义自己的 equals 方法版本,即覆盖。

【讨论】:

  • Strings 也是对象。它们内置于 ints 和 floats 之类的语言中,但它们不是原语。
  • @KevinAnderson,是的,我编辑了答案。不是那么清楚。感谢您指出。
【解决方案2】:

你试过==了吗?

如果它真的要淘汰一个整数,那么== 是要走的路。

您不能在 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()))

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

应该可以正常工作。

【讨论】:

  • 感谢您清理它,不,我没有尝试==,因为我读到它只会比较内存位置并认为所有返回类型都是这种情况
  • 没问题很高兴我能帮上忙。我不是想贬低你的或任何东西,但能够测试事情会有很长的路要走。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2023-03-03
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多