Java 如何准确比较字符串?

Java 如何准确比较字符串?,java,android,arrays,android-intent,switch-statement,Java,Android,Arrays,Android Intent,Switch Statement,我有一个函数,其中接受一个字符串和2 int。该函数根据字符串的内容,对2个数字执行操作 我的默认案例总是运行,即使我通过了“+”、“-”等。我不知道为什么。 代码如下: public int evaluateAnswerTwoOperations(String operation, int numberOne, int numberTwo) { switch(operation){ case "+": Log.d("usingsubtrac

我有一个函数,其中接受一个字符串和2 int。该函数根据字符串的内容,对2个数字执行操作

我的默认案例总是运行,即使我通过了“+”、“-”等。我不知道为什么。 代码如下:

 public int evaluateAnswerTwoOperations(String operation, int numberOne, int numberTwo) {

    switch(operation){

        case "+":
            Log.d("usingsubtraction","plus2nmbers");
            return numberOne + numberTwo;
        case "-":
            Log.d("usingsubtraction","usingsubtraction");
            return  numberOne - numberTwo;
        case "/":
            Log.d("usingsubtraction","usingdivision");
            return numberOne / numberTwo;
        default:
            Log.d("usingsubtraction","usingmultiplication");
            return numberOne*numberTwo;

    }

有人知道为什么吗?

因为每个开关都只使用长度为1的字符串,所以我宁愿使用
char
。因此,请尝试以下方法:

public int evaluateAnswerTwoOperations(char operation, int numberOne, int numberTwo) {

    switch(operation){

        case '+':
            Log.d("usingsubtraction","plus2nmbers");
            return numberOne + numberTwo;
        case '-':
            Log.d("usingsubtraction","usingsubtraction");
            return  numberOne - numberTwo;
        case '/':
            Log.d("usingsubtraction","usingdivision");
            return numberOne / numberTwo;
        default:
            Log.d("usingsubtraction","usingmultiplication");
            return numberOne*numberTwo;

    }
}

如果代码始终运行
默认值
大小写,则与
string.equals()
相比,传入的字符串不等于任何其他大小写。转储该参数的值(可能用尖括号括起来以显示空格和/或其十六进制表示形式),以查看得到的是什么,而不是您认为得到的是什么…

此问题可能由以下问题引起:

  • 您的字符串无法与任何案例进行比较
  • 您在函数中传递的值确实包含一些易受攻击的值
  • 所以,您只需检查是否在函数中传递了正确的值。这可以通过将CHAR而不是字符串传递到函数中来避免(这是+、-、/和*)的好方法。。。 用这个
    public int evaluateAnswerTwoOperations(字符操作、int numberOne、int numberTwo)
    然后做其余的比较

    您的问题的其他可能解决方案可以是:


    在默认情况下,您必须引入另一个开关情况来与*进行比较,而不是相乘。在默认情况下,打印一个错误。。所以如果两种情况都不完美匹配。。错误将被打印

    传统上,
    开关
    只能用于基本类型,如
    int
    long
    char
    short
    enum
    。我不确定,但据我所知,Android在最新版本中也不支持带
    String
    switch
    ,但在旧版本中肯定不支持,因此,正如其他答案所建议的,您可能希望使用并传递
    char
    而不是
    String
    ,由于缺乏对行动的支持

    但是,在Java 7上,已经支持带有
    字符串的
    开关。例如:

    package dustin.examples;
    
    import static java.lang.System.out;
    
    /**
     * Simple class demonstrating switch on Strings available with JDK 7.
     */
    public class StringsWithSwitchDemo
    {
       /**
        * Main executable function.
        *
        * @param arguments Command-line arguments: none expected.
        */
       public static void main(final String[] arguments)
       {
          final String name =   arguments.length > 0
                              ? arguments[0]
                              : "Dustin";
    
          switch (name)
          {
             case "Dino" :
                out.println("Flintstones?");
                break;
             case "Neo" :
                out.println("Matrix?");
                break;
             case "Gandalf" :
                out.println("Lord of the Rings?");
                break;
             case "Dustin" :
                out.println("Inspired by Actual Events");
                break;
             default :
                out.println("The Good, the Bad, and the Ugly?");
          }
       }
    }
    

    .

    不可能重复,请检查部署的代码是否是最新的,同时检查输入的尾随/前导空格
    return
    return
    在@anaxin之后(除非您使用try/finally)@anaxin,它需要使用
    char
    而不是
    String
    。就我所知,您在这里给出的代码看起来是正确的,因此错误可能发生在其他地方。我建议添加一个
    Log.d()
    调用来打印
    操作的值。您应该在值的周围加引号,以便可以看到可能导致问题的空白。未经请求的建议:您应该明确使用
    大小写“*”:
    进行乘法运算,并使用
    默认值:
    打印适当的错误消息。虽然这绝对是一个好建议,它不会改变预期的行为,也不会指出OP原始代码中的错误。