为什么这种情况不满意?

时间:2012-06-18 12:58:12

标签: java android if-statement conditional-statements

我希望你能帮助我:) 我想从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

那为什么这个条件不满意?

6 个答案:

答案 0 :(得分:3)

使用String

比较equals()
if (filePath.equals("default"))

阅读this了解详情。

==比较参考,而不是值。在您的情况下,您要检查值相等,而不是引用相等。

答案 1 :(得分:2)

尝试

filePath.equals("default")

而不是

if (filePath == "default")

答案 2 :(得分:2)

==检查引用是否相同。

.equals检查值

答案 3 :(得分:1)

不要只使用它:
这会比较引用,而不是值!

if (filePath == "default")


始终使用equals(...)表示字符串!

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

  

比较相等的值。因为这个方法是在   对象类,派生所有其他类,它是   为每个班级自动定义。但是,它没有执行   大多数班级的智能比较,除非班级覆盖它。   对于大多数Java核心类,它已经以有意义的方式定义。如果   它没有为(用户)类定义,它的行为与==。

相同

答案 4 :(得分:0)

如果filePath为null,则使用此选项来避免NullPointerException

if ("default".equals(filePath ))

答案 5 :(得分:0)

试试这个

if (filePath.equals("default"))