2013-08-06 42 views
1

我有一个非常简单的问题,我真的不明白。如果陈述似乎跳过,但要求符合

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

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的intstead,它skipps if语句,并返回 “F” 时,我知道肯定是的keyValue “C”。

为什么会发生这种情况?

+0

要求未满足时所有。请参阅http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – Bart

+1

字符串使用.equals()而不是==运算符。 – leigero

+1

要比较两个字符串,您应该使用equals方法:if(keyValue.equals(“C”)){ – alfredaday

回答

7

首先,检查How do i compare string?

其次,你不必为char转换为字符串,以检查它的价值,你可以像下面

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

该方法返回一个字符串,因此您需要在返回或更改返回之前将字符串转换为字符串类型也是如此。 – Rik

+0

@Rik更正了,谢谢指出 – sanbhat

+1

@sanbhat,upvote将字符转换为字符串的想法 –

4

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

if (someString.equals("C")){ 
     return someString; 
    } else if (someString.equals("G")) { 
     return someString; 
    } 
  • ==检查两个变量是否引用同一个对象。
  • equals()方法检查对象的内容是否相同。
  • 所以如果==返回true,则equals()方法还因为它们指的是同一个对象返回true,因此他们是平等的

你可以找到string comparison with equals and assignment 一个很好的解释。如果你想使用的字符,

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

请问我知道downvote的原因吗?这样我可以纠正自己? –

+0

谢谢,我不知道这个,现在它就像一个魅力! 但是,它会比较一个,例如int如: if(int i = 1){do stuff}? –

+0

这是因为int是一个基元,对于对象类型和基元类型的比较是不同的。 –

0

试一下这个

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