【发布时间】:2017-02-14 11:36:21
【问题描述】:
我有一个会话属性和一个相同的字符串:
out.println("<br>");
out.println(request.getSession().getAttribute("token").toString());
out.println("<br>");
out.println(hidden_token);
out.println("<br>");
out.println(request.getSession().getAttribute("token").toString() == hidden_token);
但我得到了一个意想不到的结果
07581d61db9213eb4549b12388f8c106
07581d61db9213eb4549b12388f8c106
false
【问题讨论】:
-
您正在检查它们是否是同一个对象 (
==)。如果您想查看两个对象是否“相等”,请使用equals()(其中“相等”表示方法的具体实现意味着什么)。在equals()的String实现中,如果它们的内容是相同的字符序列,则它们被认为是相等的。 -
相同的结果与等号:(
-
如果 equals 不起作用,请尝试修剪它们:
request.getSession().getAttribute("token").toString().trim().equals(hidden_token.trim()) -
谢谢,现在可以了,修剪很有帮助
-
所以你意想不到的原始结果(
false)毕竟是正确的:两个字符串不同。仅通过视觉上比较两个字符串很难捕捉到前导和尾随空格。出于这个原因,当我为调试记录或打印字符串变量时,我几乎总是用引号将它们打印出来。
标签: java jakarta-ee glassfish string-comparison