为什么我的字符串比较不起作用?

好吧,这是愚蠢的,但wtf还在继续?

我在servlet中有一个String变量,它接受一个参数的值,并根据该值进行测试以执行某些操作,但if不起作用。 问题是什么?

  String action = request.getParameter("action"); System.out.println("Action: " + action); // I put 2 ifs to be sure, but not even one is working if(action.equals("something")) { System.out.println("hey"); } if(action.trim() == "something") { System.out.println("hey"); } 

在控制台上,System.out.println向我显示action的值是“某事”

 Action: something 

你的第二次比较是错误的。 您还应该使用equals而不是== ,如下所示:

 if (action.trim().equals("something")) 

==运算符比较(String)对象的引用 ,在正常情况下, 相等的字符串不会自动具有相同的引用,即它们是不同的对象。 (除非两者都内化 ,但通常你不应该考虑它)

除此之外,您的示例工作正常,第一次比较是有效的。 尝试修复第二次比较。 如果它有效,你就找到了问题所在。 如果没有,请尝试使用调试器并仔细检查所有内容。

PS:在将文字字符串与动态字符串对象进行比较时,最好在文字字符串上调用equals方法:

 "something".equals(action) 

这样,当字符串对象为null时,您可以避免NullPointerExceptions。

你的第二个条件不太可能是真的 – 你正在测试修剪action创建的字符串对象是否与字符串文字"something"是同一个对象。 仅当action在其他位置设置为相同的字面值时才会出现这种情况。 使用"something".equals( action.trim() )代替。

你的第一个条件是真的, action字符串中的字符是字符"something" 。 如果不是这样,那就没有。 将其置于测试中,记录,打印或在调试器中查看它。

如果打印字符串以进行调试,请使用类似System.out.println ( "String = >" + string + "<" ); 这样很明显是否有任何尾随空格。

Java中的字符串比较不能通过==来完成。

你必须使用String.equals()String.compareTo()

顺便说一句, String.compareTo()返回0而当两个字符串相等时, String.equals()返回true

请参阅: http : //java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#equals(java.lang.Object)

我的猜测是你有没有在println中显示的尾随或前导空格。

将此与您使用action.trim() == 'something'的事实相结合意味着此测试也不起作用。

按照其他人的建议将.equals("something")切换为.equals("something") ,它可能会起作用。

您可以通过切换if子句以首先获得字符串文字来更好地防止空值。

但是,由于您似乎也希望防止参数值上的空白,您还可以使用Apache Commons Lang中的 StringUtils.trimToEmpty对参数值进行空安全修剪:

 String action = StringUtils.trimToEmpty(request.getParameter("action")); System.out.println("Action: " + action); if("something".equals(action)) { System.out.println("hey"); } 

只是一个疯狂的猜测:可能是这些“某事”中的一个包含例如西里尔字符,看起来与其拉丁语相同。 在这种情况下,它可能是“o”。

尝试这个 :

 String action = request.getParameter("action"); System.out.println("Action: " + action); if(action.trim().equals("something")) { System.out.println("hey"); } 

equals方法比较对象标识的字符串,而不是内容。 要比较两个字符串的内容,请使用compareTo方法。