以下代码中的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
答案 0 :(得分:1)
对于您的控制台输出,您可以看到isUUID
为null
。这意味着当您尝试调用其方法equals
时,实际上没有对象可以调用它,您应该获得NullPointerException
。这就是为什么最好对知道的部分进行equals
断言的原因在左侧不会为空:
uuid.equals(isUUID)
会更好。
请注意,如果使用变量和静态字符串执行equals
断言,则最好这样做:
"myCompareString".equals(myVariable)
,因为&#34; myCompareString&#34;永远不能为空而myVariable
可以。
答案 1 :(得分:1)
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;
}