'字符'类型不转换为' String'按预期输入

时间:2014-03-05 12:38:01

标签: java if-statement char switch-statement javascript-1.7

private boolean  CharToString(){
    String lineOfText = "XXXXXX";
    String desiredResult = "X";
    String actualResult = "initialised value";
    for(int i = 0; i < lineOfText.length(); i ++){
        actualResult = Character.toString(lineOfText.charAt(i));
        }
    if(desiredResult == actualResult){
        return true;
    } else{
        return false;
    }
}

基本上,这段代码是对我所拥有的内容的再现,但旨在突出我认为经过长时间诊断和测试后的问题。如您所见,它将actualResult的值设置为lineOfText位置当前位置的字符的'char'值。 每个值都旨在将“X”输出为String(从char转换)。

但是,由于我不知道的原因,尽管actualResultdesiredResult都将“X”输出到我的调试drawText()方法(我无法弄清楚如何使用控制台日志。 ..),该方法返回false,表示两个String变量不等于

奇怪的是,如果我要将if() else更改为switch(),它将返回true(即按预期工作)。

我尝试过谷歌搜索和搜索StackOverflow,但我的搜索条件可能很差/错,因为我没有得到有用的结果:(

如果这是一个愚蠢的问题,我将非常感谢任何帮助 - 我已经尝试了很长时间才能弄清楚...

P.S。在任何地方都有一个好的图形地图编辑器吗?编辑.txt文件来创建地图似乎过于复杂,并且很难在大型/复杂地图的开发中保持一致性或连贯性......我认为必须有一些东西,你还要怎么做一个3D java游戏?

2 个答案:

答案 0 :(得分:1)

请勿使用==比较字符串。始终使用equals(),因为==仅将它们指向相同的内存地址,在这种情况下它们不会。

private boolean  CharToString(){
String lineOfText = "XXXXXX";
String desiredResult = "X";
String actualResult = "initialised value";
for(int i = 0; i < lineOfText.length(); i ++){
    actualResult = Character.toString(lineOfText.charAt(i));
    }
if(desiredResult.equals(actualResult)){
    return true;
} else{
    return false;
}
}

应该这样做

答案 1 :(得分:0)

要比较2个引用不同内存位置的字符串,您应该使用:

if(desiredResult.equals(actualResult) {
    return true;
} else {
    return false;
}

如果案件是:

String desiredResult = "test";
String actualResult = desiredResult;

在这种情况下,您可以使用if(desiredResult == actualResult),但使用equals()会更好。