我正在尝试创建一个函数,该函数将字符串作为函数并返回一个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。我试过了:
和
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 :(得分:11)
一个问题是:
if (input == "one")
应该是
if ("one".equals(input))
字符串/对象相等性检查应使用equals()方法而不是==(字符串文字比较除外)
==
检查引用相等性。
equals()
根据equals()
实现检查对象内容是否相等。
答案 1 :(得分:1)
当你比较两个String的相等性时,永远不要使用“==”运算符。因为“==”运算符检查地址相等性,即如果要比较“x == y”,则检查x的值和y的值是否在同一个内存位置。这意味着==运算符比较引用。
由于String是一个对象,当你比较两个对象时,永远不要使用==运算符,因为它们会比较2个引用是否指向同一个对象。
在您的情况下,输入指向一个对象,并且您正在将输入与位于不同位置的其他对象进行比较。
例如,您的字符串“input”在地址位置123456包含值“one”,并且您的新字符串“one”在地址位置12347处创建。所以input ==“one”比较输入的地址位置和不一样。
所以对于你的例子使用
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()方法比较两个对象,您将获得所需的输出。