【问题标题】:Java - returning int from function(String)?Java - 从函数(字符串)返回int?
【发布时间】:2013-01-03 12:30:15
【问题描述】:

我正在尝试创建一个将字符串作为函数并返回 int 的函数。

public int convert (String input) {
    int x = -1;
    if (input == "one") {
        x = 1;
    }

    else if (input == "two") {
        x = 2;
    }

    else if (input == "three") {
        x = 3;
    }
    return x;
}

问题是,(假设输入总是三个输入之一),函数总是返回-1。我试过了:

  • 返回 0 而不是 x
  • 和:

    public int convert (String input) {
    
      if (input == "one") {
         return 1;
      } 
      else if (input == "two") {
         return 2;
      }
      else if (input == "three") {
         return 3;
      }
      return -1;
    }
    

谢谢大家。

【问题讨论】:

  • 第一个方法总是返回0,而不是-1。我已经编辑过了

标签: java string int return


【解决方案1】:

一个问题是:

if (input == "one") 

应该是

if  ("one".equals(input)) 

字符串/对象相等性检查应该使用equals()方法而不是==(字符串文字比较的情况除外)

== 检查引用是否相等。

equals() 根据equals() 实现检查对象内容是否相等。

【讨论】:

    【解决方案2】:

    当您比较两个字符串是否相等时,切勿使用“==”运算符。因为“==”运算符检查地址是否相等,即如果您正在比较“x == y”,则您正在检查 x 的值和 y 的值是否在同一内存位置。这意味着 == 运算符比较引用。

    由于 String 是一个对象,当您比较 2 个对象时,切勿使用 == 运算符,因为它们会比较 2 个引用是否指向同一个对象。

    在您的情况下,输入指向一个对象,而您正在将输入与位于不同位置的其他对象进行比较。

    例如,您的字符串“input”在地址位置 123456 包含值“one”,而您的新字符串“one”在地址位置 12347 创建。因此 input == "one" 比较 input 的地址位置和一个不一样。

    所以在你的例子中使用

    public int convert (String input) {
    int x = -1;
    if (input.equals("one")) {
        x = 1;
    }
    
    else if (input.equals("two")) {
        x = 2;
    }
    
    else if (input.equals("three")) {
        x = 3;
    }
    return x;
    }
    

    .equals 方法比较对象相等而不是引用相等。因此,如果您使用 .equals() 方法比较两个对象,您将获得所需的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2014-12-07
      • 2014-11-06
      • 1970-01-01
      相关资源
      最近更新 更多