0
當java將字符串傳遞給函數時,它傳遞的值不是用於引用的傳遞引用,請點擊here。JSON解析器,它接受字符串的引用並將其解析爲JsonObject
getKeyValue(String o); // This creates a new string and passed by value
Class A
{
String o;
}
A a;
getKeyValue(A a); // This passes reference of object a, String o is not duplicated.
所以當我有一個多層次的JSON對象像{A:{B:{C: 「d」}}}和我有我需要從像得到值的路徑:乙C(路徑)
for(String s: path.split(':')
{
jsonObject = jsonObject.get(s)
}
println jsonObject
假設我有2 GB的字符串,現在當我做jsonObject.get(S)我創造價值由2 GB副本,並將其傳的方法和GC需要清除所有記憶每次我試着走一步。
有沒有什麼辦法避免這種情況,而不寫一個庫來接受字符串作爲參考使用StringBuilder等..。
是否有任何庫在java中解決這個問題。
* Java中的所有*都使用按值傳遞......說實話,我不清楚你在問什麼。使用'getKeyValue'方法和'Class A'的問題的前半部分特別不明確:( –
)當你在Java中傳遞一個字符串時,它不會被複制,它只在你修改它時被複制,因爲Java字符串是不可變的並修改它們以創建一個新的實例 – matanso
@JonSkeet True。但是當a傳遞「引用被複製爲一個值」而不是整個對象時,請檢查http://javapapers.com/core-java/java-通過值傳遞參考/ – Prabhath