Тип "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()
было бы лучше практиковать.