【问题标题】:String.equals don't return true even when it isString.equals 不会返回 true,即使它是
【发布时间】:2014-11-22 20:07:30
【问题描述】:

我有这么一小段简单的代码,但我不知道为什么我不能让它工作。

tagName="Hello";
String value="Hello";
if (tagName!=null && tagName.equals(value))
{
    int io=0;
}

tagName 不是null,显然等于value,但代码永远不会到达int io=0;

【问题讨论】:

  • 您确定您正在运行此代码吗?如果在 if 语句之前打印 tagName.equals(value) 的值会发生什么?
  • if 块中没有输出。尝试添加println 语句或对其进行调试
  • 是的,代码正在运行,我在io=0 语句处设置了断点,我正在逐步调试它只是跳过 if 语句,就好像它返回了 false。
  • 你很困惑,分配肯定会发生。现在赋值是没有意义的,因为一旦你离开这个块,那个变量就消失了,所以这样做没有意义。

标签: java compiler-optimization


【解决方案1】:

Java 可能会优化您的赋值语句,因为它没有任何效果。您可以将 System.out.println 放入该块中,或者您可以将“int io”移动到 if 之外,并在该块内进行赋值。

【讨论】:

  • 谢谢你这是优化,我不得不在那里放置很多代码但现在我只是检查这个虚拟语句,如果代码运行到这里并且真的很困惑为什么它没有。现在,当我使块变得没有意义时,断点就很好了。必须说这个java优化也令人惊讶和困惑。
  • 你说得对,shekhar suman,你发布了一个非常详细的回复并提供了很多帮助,但我已经通过bmargulies 的建议解决了这个问题,所以接受了你的投票。如果我能接受两个答案,我肯定会这样做,我什至投票支持你所有的 cmets 以表示感谢。
  • @shekharsuman 您首先侮辱了 OP(“糟糕的设计”),这可能导致了一些不利的想法。但是当你删除它时,净投票是 0,所以我不确定这是什么大惊小怪。
  • @bmargulies- 我收到了错误,实际上我收到的只是我的错误。这与OP的问题无关,而是我的错误假设。如果 OP 有任何运行时异常但情况并非如此,这就是答案。他的回答非常正确和有道理……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多