【问题标题】:If (x == "0") issue [duplicate]如果(x ==“0”)问题[重复]
【发布时间】:2020-05-28 05:05:14
【问题描述】:

我有一个字符串变量,其值通常为“0”,但通常也不是“0”。

每当我更新此值时,都需要对其进行解析。 我知道这个字符串,当它为零时它无法解析。

但是我不明白为什么比较两个字符串的 if 语句不起作用,它背后一定有一些我不明白的逻辑,如果有人能解释我所缺少的,我将不胜感激。

我已经通过使用.equals("0") 解决了这个问题,但我不知道为什么这种方法有效而另一种方法无效。提前谢谢你。

if (x == "0") {
  integer = 0;
} else {
  integer = Integer.parseInt(x);
}

【问题讨论】:

标签: java android-studio if-statement


【解决方案1】:

我已经通过使用 .equals("0") 解决了这个问题,但我不知道为什么这种方法有效而另一种方法无效。

Java 中的== 比较引用(类似于C 中的“指针”),String.equals() 是一个将比较内容的重写方法。

【讨论】:

  • 那么在什么情况下我需要使用“==”运算符?
【解决方案2】:

比较字符串时需要使用.equals():

x.equals("0") 

为避免 x 为空的问题,您可以执行以下操作:

"0".equals(x) // or Objects.equals(x, "0") as suggested by @knittl

这将正常工作:

// x == "0" is reference comparison
// this is value comparison
if (x.equals("0")) {
  integer = 0;
} else {
  integer = Integer.parseInt(x);
}

【讨论】:

  • 为了避免 x 为空的问题,将其设为 "0".equals(x)Objects.equals(x, "0")
  • 我认为数字前的“0”是默认值是对的吗?如果 .equals 由于 X 为空而无法返回值,它将返回“0”?
  • @adjawsdaw 不,“0”是一个字符串对象。我们在其上调用成员函数 .equals 以将其与 x 中的值进行比较。如果值匹配 .equals 则返回 true;如果它们不匹配 .equals 则返回 false。我希望这是有道理的。如果我能进一步澄清这一点,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
相关资源
最近更新 更多