为什么我的For循环中的IF语句永远不会满足它的条件?

时间:2013-03-14 15:01:28

标签: java

我已尝试过所有内容,但我无法理解为什么会遇到这个问题。这是我正在使用的代码:

        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循环中,两个值在toasts中输出,我可以清楚地看到两个值是否相同,但for循环总是完成而没有输入IF语句,或者IF语句永远不会满足其条件,但我不知道不知道为什么。

我在C#中一直都是这样做的,它总是有效的,有谁能看出为什么这不适用于Android?我知道在我的帖子中没有太多的信息可以继续,但是当我说他们的值最终匹配迭代for循环时,你可以相信我。任何建议都会受到赞赏,因为我一无所知。

3 个答案:

答案 0 :(得分:9)

删除if语句末尾的分号:

 if (goingToId.equals(objarray.get(i).getid()))

答案 1 :(得分:4)

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

从if条件结束时删除semicon

答案 2 :(得分: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创建对象并且具有相同的内容,则它分配与第一个字符串包含相同的引用