使用if else更新java字符串值

时间:2014-03-12 15:01:25

标签: java android

我是java的新手,我遇到了一个对我没有意义的问题。 我有一个列表视图,启动一个活动,活动必须阅读 一些意图值,以显示正确的信息。

    // getting intent data
    Intent in = getIntent();
    // Get name
    final String catName = in.getStringExtra("category").toString();
    //Textview
    TextView categorytw= (TextView)findViewById(R.id.category_name);
    categorytw.setText(catName);

    // Category URL
    String catUrl = "";

    if( catName =="Italy" ){
        catUrl = "http://url .com/italy.php";
    }
    else if( catName =="Belgium"){
        catUrl = "http://url .com/italy.php";
    }
    else if( catName =="France"){
        catUrl = "http://url .com/france.php";
    }

正如您所见,我得到了意图值"类别"并将其分配给 catName 变量,然后更新标题textview categorytw

到目前为止一切都很好,categorytw根据catName的值更新。

现在我需要根据类别名称获取特定网址,这就是原因 我初始化 catUrl ,它在开头是空的。 根据 catName 的值,catUrl将具有不同的值。

当我从url(catUrl)获取一些数据时,稍后会使用此值/ url:

try{
XMLParser parser = new XMLParser();
String xml   = parser.getXmlFromUrl(catUrl );
}

问题是catUrl总是空的。 我仔细检查了catName值。

有人知道这里可能有什么问题吗?

5 个答案:

答案 0 :(得分:6)

Java中的

==通过引用比较字符串(即指向内存中相同位置的变量),而不是值。使用catName.equals("Italy")按值进行比较。

答案 1 :(得分:0)

使用.equals来比较字符串,而不是==

==比较引用相等性。

.equals比较值相等。

在你的情况下,"意大利","比利时","法国"和catName指向不同的对象。没有任何条件匹配。因此,catUrl始终为空。

更新您的代码,如下所示:

   if( "Italy".equals(catName)){
        catUrl = "http://url.com/italy.php"; ## Remove the space between url and .com
    }
    else if("Belgium".equals(catName)){
        catUrl = "http://url.com/italy.php";
    }
    else if( "France".equals(catName)){
        catUrl = "http://url.com/france.php";
    }

答案 2 :(得分:0)

字符串不能像java中的原始变量那样进行比较。原因是==仅比较引用。因此,如果您检查if (1 == 1),则会将其评估为true,因为jvm会重用基元而不是为其分配新内存。

字符串工作不同。在Java中,字符串不是原始变量,这就是为什么每次编写"this is a string"时,都会生成一个新对象,并在内存中分配空间,尽管引号中的文本相同。如果你愿意,你可以把它想象成new String(// all the characters of a string)之类的东西。 这是为了你必须使用"some string".equals("another string")来比较字符串。使用equals进行检查不仅会比较参考。它检查对象是否具有相同的值,这就是为什么这样做的原因。

所以正确的方法是:

if( catName.equals("Italy") ){
    catUrl = "http://url .com/italy.php";
}

答案 3 :(得分:0)

Java编程语言中的

==表示它将内存地址与其他对象进行比较。在你的代码片段中,当你调用toString()时,它将从堆中生成一个新的String对象作为返回。 if-else语句中的逻辑它使用来自常量池的String与堆对象中的不同。您应该使用equals()来比较字符串值,有关详细信息,请参阅JDK源代码。

答案 4 :(得分:0)

将catUrl声明为StringBuilder,使用StringBuilder.append()为其添加新值。