3

我已经尝试了一切,但我不明白为什么会遇到这个问题。这是我正在使用的代码:

        for( int i=0; i< objarray.size();i++)
        {
            //Toast shows values
            Toast.makeText(getApplicationContext(), goingToId+""+objarray.get(i).getid(),Toast.LENGTH_SHORT).show();

            if (goingToId == objarray.get(i).getid())
            {
                //This Toast NEVER shows
                Toast.makeText(getApplicationContext(), "Inside the if statement",Toast.LENGTH_SHORT).show();

                glat = objarray.get(i).getlat();
                glon = objarray.get(i).getlon();
                loc = new Location("dummyprovider");
                loc.setLatitude(glat);
                loc.setLongitude(glon);
            }   
        }

被比较的两个值都是字符串。在for循环中,两个值以toast的形式输出,我可以清楚地看到两者何时是相同的值,但是for循环总是在没有进入IF语句的情况下完成,或者IF语句永远不满足它的条件,但我不不知道为什么。

我一直在 C# 中做这种事情,而且它总是有效,谁能明白为什么这在 Android 中不起作用?我知道在我的帖子中没有太多信息可以继续,但是当我说它们的值在遍历 for 循环时最终匹配时,你可以相信我。任何建议将不胜感激,因为我一无所知。

4

3 回答 3

9

删除 if 语句末尾的分号:

 if (goingToId.equals(objarray.get(i).getid()))
于 2013-03-14T15:04:21.113 回答
4
if (goingToId == objarray.get(i).getid()); //<<<<

从 if 条件的末尾删除分号

于 2013-03-14T15:04:12.677 回答
2

删除分号。

if (goingToId == objarray.get(i).getid());

当您在语句末尾写分号时,if控制不会进入其中,而是进入if成为无法访问的代码。

equals了解和之间的区别==

== 和 equals() 方法之间的区别。

== 用于比较参考。和 equals 方法检查字符串变量的内容。

例子。

第一个例子

String s1 = "FirstString";
String s2 = "FirstString";

if(s1 == s2) {
   //This condition matched true because java don't make separate object for these two string. Both strings point to same reference.
}

第二个例子

String s1= "FirstString";
String s2 = new String("FirstString");

if(s1.equals(s2)) {
 //This condition true because same content.
}

if(s1 == s2) {
 //This condition will be false because in this java allocate separate reference for both of them
}

结论:Java 检查字符串是否存在。如果我们使用 new 创建第二个字符串的对象并且具有不同的内容,那么它会创建对象并分配不同的引用,如果我们不使用 new 创建对象并且具有相同的内容,那么它分配与第一个字符串相同的引用包含.

于 2013-03-14T15:04:58.163 回答