Java 为什么';我的字符串比较不起作用吗?

Java 为什么';我的字符串比较不起作用吗?,java,Java,好吧,这很愚蠢,但是wtf还在继续吗 我在servlet中有一个字符串变量,它接受一个参数的值,并根据该值进行测试,但如果不起作用,。有什么问题 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("someth

好吧,这很愚蠢,但是wtf还在继续吗

我在servlet中有一个字符串变量,它接受一个参数的值,并根据该值进行测试,但如果不起作用,
。有什么问题

 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向我显示操作的值是“某物”


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

if (action.trim().equals("something"))
=
操作符比较(字符串)对象的引用,在正常情况下,相等的字符串不会自动具有相同的引用,即它们是不同的对象。(除非两者都是,但通常你不应该考虑)

除此之外,您的示例运行良好,第一次比较是有效的。尝试修正第二个比较。如果它有效,你就会发现你的问题。如果没有,请尝试使用调试器并仔细检查所有内容

PS:比较文字字符串和动态字符串对象时,最好对文字字符串调用
equals
方法:

"something".equals(action)

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

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

只是一个粗略的猜测:可能这些“某物”中有一个包含一个西里尔字母,它看起来与拉丁字母完全相同。在这种情况下,它可能是“o”。

您的第二个条件不太可能是真的-您正在测试通过修剪
操作创建的字符串对象是否与字符串文本
“something”
是同一个对象。只有在别处将
action
设置为相同的文本值时,才会出现这种情况。改用
“something”.equals(action.trim())

您的第一个条件为true,
操作
字符串中的字符是
字符“something”
。如果不是真的,那就不是。在测试中断言、记录、打印或在调试器中查看


如果打印字符串进行调试,请使用类似于
System.out.println(“string=>”+string+“Java中的字符串比较不能由
==
完成

您必须使用
String.equals()
String.compareTo()
-

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

见:

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

再加上您使用的是
action.trim()==“something”
,这意味着该测试也无法工作


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

通过将if子句切换为先使用字符串文字,可以更好地防止空值

但是,由于您似乎也希望防止参数值出现空白,因此也可以使用from对参数值进行空安全修剪:

试试这个:

String action = request.getParameter("action");
System.out.println("Action: " + action);

if(action.trim().equals("something"))
{
    System.out.println("hey");            
}

什么不起作用?是不是“嘿”只打印了一次,你希望打印两次?是不是“嘿”没有出现在你的控制台上?他很明确://我写了两个“如果”,但一个都不起作用。请不要叫它“JAVA”-它是“JAVA”。这个名字不是首字母缩略词,所以你不需要用大写字母写它。好的,我不会叫它。”JAVA“more.:)1.第一个if(action.equals)在第一个位置工作,但在另一个函数中,我计算变量和if in not working,我确信值是相同的。嗯,我的问题,我将尝试单独找出问题所在。2.对于所有答案,我不会使用”==“对于这种评估,第二,我不会像5分钟前那样使用compareTo()(仍然是相同的评估类型)。问题解决了。(有点:)我编辑了标题:JAVA->JAVA:)这是完全错误的
String.equals()
比较字符串并返回
true
如果它们与预期的相等。我经常执行
System.out.println(“Action:[“+Action+]”])用于调试,因为您可以看到尾随空格。很抱歉,应该是
System.out.println(“操作:[“+操作+”])。今天早上我一直在写JavaScript:)你的答案应该是首选的,它更正确,甚至可以避免NPE:s(理论上,不是在这个确切的例子中)。哦,好吧,希望其他人也注意到这一点。+1用于在“>”内打印字符串,这只是突出显示了一个尾随的换行符,它干扰了我的字符串。matches()+为避免NullPointerException,在字符串文字上调用equals。您所说的是真的,但如果您解释为什么它是真的,则会更有帮助。(即,
a.equals(b)
测试两个字符串的内容是否相同,但是
a==b
仅当a和b都引用相同的字符串对象时才返回true。)
String action = StringUtils.trimToEmpty(request.getParameter("action"));

System.out.println("Action: " + action);

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

if(action.trim().equals("something"))
{
    System.out.println("hey");            
}