Java JSONObject.put()赢了';t存储另一个JSONObject的引用
您是否注意到,如果使用put()将一个JSONObject放入另一个JSONObject,容器JSONObject将不会存储对第一个JSONObject的引用,而是存储一个新的JSONObject 例如:Java JSONObject.put()赢了';t存储另一个JSONObject的引用,java,json-lib,Java,Json Lib,您是否注意到,如果使用put()将一个JSONObject放入另一个JSONObject,容器JSONObject将不会存储对第一个JSONObject的引用,而是存储一个新的JSONObject 例如: JSONObject jtmp1 = new JSONObject(); JSONObject jtmp2 = new JSONObject(); jtmp1.put("test", jtmp2); System.out.println(System.identityHashCode(j
JSONObject jtmp1 = new JSONObject();
JSONObject jtmp2 = new JSONObject();
jtmp1.put("test", jtmp2);
System.out.println(System.identityHashCode(jtmp2));
System.out.println(System.identityHashCode(jtmp1.getJSONObject("test")));
两次打印的输出不同,因此jtmp2不直接存储在jtmp1中
这是正常的行为吗?有什么解决办法吗?我对JAVA非常陌生,但在我看来,这并不是人们所期望的行为。我也遇到了这个问题,这似乎是正常的行为,但我在不断复制它时遇到了困难。解决方法是将所有放入和取出的对象视为传递值。这实际上可能是一个问题,但您似乎正在使用的JSON库不再受支持。如果可以,我将更改为GSON,它在语法上与您正在使用的库非常相似,没有此问题,并且当前受支持。在
public JSONObject getJSONObject(String key)
和public JSONObject put(String key,Object value)的源代码中
对象几乎直接插入到HashMap
中,并直接从HashMap
中检索。我的意思是,在对象和JSONObject之间来回转换,但这不应该影响系统?