Java 虽然满足了要求,但If语句似乎跳过了

Java 虽然满足了要求,但If语句似乎跳过了,java,string,if-statement,equals,Java,String,If Statement,Equals,我有一个非常简单的问题,我真的不明白 我有一个方法,它接受字符串并确定字符串的第一个字符是什么,然后返回它 public String deterFirstChar(String value){ String keyValue; char res; res = value.charAt(0); keyValue = Character.toString(res); if (keyValue == "C"){ return keyValue

我有一个非常简单的问题,我真的不明白

我有一个方法,它接受字符串并确定字符串的第一个字符是什么,然后返回它

public String deterFirstChar(String value){
    String keyValue;
    char res; 
    res = value.charAt(0);
    keyValue = Character.toString(res);
    if (keyValue == "C"){
        return keyValue;
    } else if (keyValue == "G") {
        return keyValue;
    }
    System.out.println("Error: Wrong keyParam");
    return "F";
}
但是,在确定keyValue为“C”时,它跳过if语句并返回“F”,而不是返回keyValue=C

为什么会发生这种情况?

首先,检查

其次,您不必将char转换为String来检查其值,您可以像下面这样做

res = value.charAt(0);
//keyValue = Character.toString(res); NOT REQUIRED
if (res == 'C'){
    return Character.toString(res);
} else if (res == 'G') {
首先,检查

其次,您不必将char转换为String来检查其值,您可以像下面这样做

res = value.charAt(0);
//keyValue = Character.toString(res); NOT REQUIRED
if (res == 'C'){
    return Character.toString(res);
} else if (res == 'G') {

您不应该使用
==
比较字符串,而应该使用
equals()
方法

 if (someString.equals("C")){
        return someString;
    } else if (someString.equals("G")) {
        return someString;
    }
  • =
    检查两个变量是否引用同一对象
  • equals()
    方法检查对象的内容是否相同
  • 因此,如果
    =
    返回true,那么
    equals()
    方法也会返回true,因为它们引用的是相同的对象,因此它们是相等的
你可以找到一个很好的解释 如果要使用字符

res = value.charAt(0);
if (res == 'C'){
    return Character.toString(res);
} else if (res == 'G') {
    return Character.toString(res);
 }

您不应该使用
==
比较字符串,而应该使用
equals()
方法

 if (someString.equals("C")){
        return someString;
    } else if (someString.equals("G")) {
        return someString;
    }
  • =
    检查两个变量是否引用同一对象
  • equals()
    方法检查对象的内容是否相同
  • 因此,如果
    =
    返回true,那么
    equals()
    方法也会返回true,因为它们引用的是相同的对象,因此它们是相等的
你可以找到一个很好的解释 如果要使用字符

res = value.charAt(0);
if (res == 'C'){
    return Character.toString(res);
} else if (res == 'G') {
    return Character.toString(res);
 }
试试这个

public static char findFirstChar(String string){
    return string.charAt(0);
}
    char out = findFirstChar("Rakesh");
    System.out.println("First Character:"+out);
试试这个

public static char findFirstChar(String string){
    return string.charAt(0);
}
    char out = findFirstChar("Rakesh");
    System.out.println("First Character:"+out);


根本没有满足要求。请参阅Strings use.equals()而不是==运算符。要比较两个字符串,应使用equals方法:if(keyValue.equals(“C”){完全不满足要求。请参阅Strings use.equals()而不是==运算符。要比较两个字符串,应使用equals方法:if(keyValue.equals(“C”)){该方法返回一个字符串,因此您需要在返回之前将字符转换为字符串,或者也更改返回类型。@Rik更正,感谢您指出它out@sanbhat,向上投票支持将字符转换为字符串的想法谢谢你的回答,这很有效!我一开始试过,但我用了“C”而不是“C”。是吗字符串专用?是,
“”
表示字符串,
''
表示字符该方法返回字符串,因此您需要在返回之前将字符转换为字符串,或者也更改返回类型。@Rik更正,感谢您指出它out@sanbhat,向上投票支持将角色转换为字符串的想法谢谢你的回答,这很有效!我一开始我是这么做的,但我用了“C”而不是“C”。是“字符串专用”吗?是的,
表示字符串和
表示字符我可以知道否决投票的原因吗?这样我就可以更正自己了吗?谢谢,我不知道这一点,现在它像一个符咒一样工作!但是,在比较a时它会起作用,例如:if(int I=1){do stuff}这是因为int是一个基元,对象类型和基元类型的比较是不同的。我可以知道下一票的原因吗?这样我就可以纠正自己了吗?谢谢,我不知道这一点,现在它就像一个符咒一样工作!但是,在比较a时它会工作,例如:if(int I=1){do stuff}?这是因为int是一个基元,对象类型和基元类型的比较是不同的。