运行列表的java for循环只执行一次

时间:2017-05-14 10:42:08

标签: java

以下代码中的for循环只执行一次。我正在寻找类似的问题,但是那些东西会像在我不喜欢的时候在循环中编辑列表那样打破它。

public String getProfileList(JSONObject obj, String uuid) {
    JSONObject profile = (JSONObject) obj.get("profiles");

    @SuppressWarnings("unchecked")
    ArrayList<String> list = new ArrayList<String>(profile.keySet());

    System.out.println(list);

    for (String object: list) {
        System.out.println(object);
        String isUUID = (String) ((JSONObject) profile.get(object)).get("mpm-data:uuid");
        System.out.println(object + " == " + isUUID);
        if (isUUID.equals(uuid)) {
            System.out.println("TRUE");
            return object;
        }
    }
    System.out.println("no profile found.");
    return null;
}

此代码输出:

[5fb4acd48e7d422eabecd82e32fb03c6, 44d01181eae635d31f2cefe5e1f75cd4,e0e96e422659dfdc1ad16d53a37ee618, a3ae7136f900457290e99bd657db0385]
5fb4acd48e7d422eabecd82e32fb03c6
5fb4acd48e7d422eabecd82e32fb03c6 == null

3 个答案:

答案 0 :(得分:1)

对于您的控制台输出,您可以看到isUUIDnull。这意味着当您尝试调用其方法equals时,实际上没有对象可以调用它,您应该获得NullPointerException。这就是为什么最好对知道的部分进行equals断言的原因在左侧不会为空:

uuid.equals(isUUID)会更好。

请注意,如果使用变量和静态字符串执行equals断言,则最好这样做:

"myCompareString".equals(myVariable),因为&#34; myCompareString&#34;永远不能为空而myVariable可以。

答案 1 :(得分:1)

当isuuid为null时,

if(isUUID.equals(uuid))将抛出nullPointerException。

您应该检查数据是否正确,并处理异常。

你可以在commons-lang.jar中使用StringUtils.equals(String str1,String str2),然后你不需要自己处理null,参见http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html

答案 2 :(得分:1)

System.out.println(object + " == " + isUUID);

代码打印 5fb4acd48e7d422eabecd82e32fb03c6 == null和你在if条件下使用的下一个语句。如果isUUID为null,它应该抛出空指针异常。请你检查这一点

if (isUUID.equals(uuid)) {
            System.out.println("TRUE");
            return object;
        }