Почему это условие не выполняется?

1

я надеюсь, что вы можете мне помочь :) Я хочу получить строку пути файла шрифта из sharedpreferences, и если нет какой-либо строковой загрузки шрифта по умолчанию в активах, хорошо. проблема возникает, когда я пытаюсь стабилизировать состояние, см. здесь:

 String filePath = new String(preferences.getString(String.valueOf(v.getId()+"font"),"default"));
    Log.d("","choosed font: "+filePath);

    if (filePath == "default"){
        v.setTypeface((Typeface.createFromAsset(getAssets(),"fonts/Default.ttf")),preferencias.getInt(String.valueOf(v.getId()+"style"), 0));
    }else{
        v.setTypeface(Typeface.createFromFile(filePath),preferencias.getInt(String.valueOf(v.getId()+"style"), 0)); 
    }

как вы можете видеть, программа загрузила шрифт по умолчанию, если filePath = default, но программа всегда выполняет порядок внутри "else"...

порядок отображения журнала отображается четко: выбранный шрифт: по умолчанию. потому что я никогда не putString

так почему это условие не удовлетворено??

  • 0
    Посмотрите на это может помочь вам.
Теги:
if-statement
condition

6 ответов

3
Лучший ответ

Сравнить String с помощью equals()

if (filePath.equals("default"))

Прочтите это для получения дополнительной информации.

== сравнивает ссылки, а не значения. В вашем случае вы хотите проверить равенство значений, а не ссылочное равенство.

  • 0
    Oww это сработало, спасибо !!!
  • 0
    Пожалуйста. :-)
Показать ещё 2 комментария
2

== проверяет, является ли ссылка одинаковой.

.equals проверить значение

2

пытаться

filePath.equals("default")

вместо

if (filePath == "default")
1

Не просто используйте это:
Это сравнивает ссылки, а не значения!

if (filePath == "default")


всегда используйте equals(...) для Strings!

if (filePath.equals("default"))


Исправленная версия вашего кода:

 String filePath = new String(preferences.getString(String.valueOf(v.getId()+"font"),"default"));
    Log.d("","choosed font: "+filePath);

    if (filePath.equals("default")){
        v.setTypeface((Typeface.createFromAsset(getAssets(),"fonts/Default.ttf")),preferencias.getInt(String.valueOf(v.getId()+"style"), 0));
    }else{
        v.setTypeface(Typeface.createFromFile(filePath),preferencias.getInt(String.valueOf(v.getId()+"style"), 0)); 
    }

Объяснение: http://leepoint.net/notes-java/data/expressions/22compareobjects.html

Сравнивает значения для равенства. Поскольку этот метод определен в классе Object, из которого выведены все остальные классы, он автоматически определяется для каждого класса. Тем не менее, он не выполняет интеллектуальное сравнение для большинства классов, если класс не переопределяет его. Он был определен значимым образом для большинства базовых классов Java. Если он не определен для (пользовательского) класса, он ведет себя так же, как ==.

0

используйте это, чтобы избежать NullPointerException, если filePath имеет значение null

if ("default".equals(filePath ))
  • 1
    Что если это желаемое поведение?
  • 0
    Это зависит от того, что вы хотите сделать. Если вы хотите всегда избегать NPE, вы должны использовать эту конструкцию, если ваша ссылка может быть нулевой и это часть вашей логики, вы можете использовать обычную конструкцию и ловить исключение.
Показать ещё 1 комментарий
0

попробуй это

if (filePath.equals("default"))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню