【问题标题】:Integer.toString() add "\u0000" characters, and if statement fails... [duplicate]Integer.toString() 添加“\u0000”字符,如果语句失败... [重复]
【发布时间】:2015-12-30 17:37:24
【问题描述】:

好的,我在 stackOverflow 中的第一个问题。

这让我完全困惑。

Java(我用的是android Studio),我写了如下代码:

    Integer aNumber = 200;
    String aNumberInString;
    aNumberInString = Integer.toString(aNumber);
    Boolean result;
    if(aNumberInString == "200"){
        result = true;
    } else {
        result = false;
    }

    Log.i("result:",result+"");

好的,逻辑和我期望的是条件为真......但是不!它失败了。

我真的被这种行为震惊了,然后再调查一下,并在调试模式下逐步运行代码。

当我遇到这种情况时,我检查了“aNumberInString”的值,令我惊讶的是,这就是我发现的:

好的,所以我首先想到的是:“Integer.toString()”做错了什么。

让我们尝试另一种方式:“String.valueOf()”

在调试模式下运行,并且:

一样!当然失败了。

显然失败了,因为它比较了不同的字符,在互联网上我找到了修复它的方法,

string.replace ("\\ u0000", "");

但我的问题不是如何解决,而是:

为什么会这样?

有没有防止这种情况发生的正确方法?

从已经非常感谢大家, 问候,尼古拉斯

【问题讨论】:

  • 不要使用==进行字符串比较,使用equals()
  • 请注意:您对调试显示的解释是错误的:aNumberString 包含偏移量 8 的字符“2”、“0”和“0”,即字段 @987654330 @ (8) 和 count (3) 显示。

标签: java android string integer


【解决方案1】:

您正在进行参考比较。要比较字符串,您需要调用equals。通过对 Object 执行 ==,您是在要求 Java 确保它们是同一个对象,而不是它们是否具有相同的值。

变化:

if(aNumberInString == "200"){

到这里:

if(aNumberInString.equals("200") {

或者更好的是,减少NullPointerExcpetion的机会:

if("200".equals(aNumberInString))

【讨论】:

  • 非常感谢,我不知道String.equal,现在可以了!再见:)
猜你喜欢
  • 2010-10-14
  • 2019-12-12
  • 2014-03-26
  • 2017-07-04
  • 2015-02-11
  • 1970-01-01
  • 2020-11-13
  • 2020-09-02
  • 1970-01-01
相关资源
最近更新 更多