Тип "Char" не преобразуется в тип "String", как ожидалось

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 на значение 'char' персонажа в текущем месте вдоль lineOfText, Каждое значение предназначено для вывода "X" в виде строки (преобразованной из символа).

Однако по неизвестным мне причинам, несмотря на actualResult а также desiredResult оба выводят "X" на мой отладчик drawText() метод (я не могу понять, как использовать консольный журнал...), метод возвращает false, указывая, что две строковые переменные НЕ равны.

Странно, если бы я изменил if() else к switch(), он бы вернулся true (т.е. работать как задумано).

Я пробовал поиск в Google и поиск в Stackru, но мои условия поиска, вероятно, плохие / неправильные, поскольку я не получаю полезных результатов:(

Любая помощь будет принята с благодарностью, и извините, если это глупый вопрос - я пытался выяснить это сам...

PS Есть ли хороший редактор графических карт онлайн где-нибудь? Редактирование TXT-файла для создания карты кажется чрезмерно сложным, и очень трудно поддерживать последовательность или согласованность при разработке больших / запутанных карт... Я полагаю, что-то должно быть ЧТО-ТО, а как еще сделать 3D-игру Java?

2 ответа

Решение

Не сравнивайте строки, используя ==, Всегда используйте 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;
}
}

Это должно сделать это

Чтобы сравнить 2 строки, которые ссылаются на разные области памяти, вы должны использовать:

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

Если бы дело было:

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

В этом случае вы можете использовать if(desiredResult == actualResult), но используя equals() было бы лучше практиковать.

Другие вопросы по тегам