可能重复:
Java是"传递引用"吗?
我今天发现了一种不寻常的Java方法:
private void addShortenedName(ArrayList<String> voiceSetList, String vsName)
{
     if (null == vsName)
       vsName = "";
     else
       vsName = vsName.trim();
     String shortenedVoiceSetName = vsName.substring(0, Math.min(8, vsName.length()));
     //SCR10638 - Prevent export of empty rows.
     if (shortenedVoiceSetName.length() > 0)
     {
       if (!voiceSetList.contains("#" + shortenedVoiceSetName))
         voiceSetList.add("#" + shortenedVoiceSetName);
     }
}
Run Code Online (Sandbox Code Playgroud)
根据我读过的有关Java传递变量,复杂对象的行为的一切,这段代码应该什么都不做.所以嗯......我在这里错过了一些东西吗?是否有一些微妙的东西丢失在我身上,或者这些代码是否属于thedailywtf?
我主要用C编写,但是在这个项目中使用Java.我想知道Java在这里做了什么.
ArrayList<Integer> prevRow, currRow;
currRow = new ArrayList<Integer>();
for(i =0; i < numRows; i++){
    prevRow = currRow;
    currRow.clear();
    currRow.addAll(aBunchOfItems);
}
Run Code Online (Sandbox Code Playgroud)
prevRow = currRow行是复制列表还是prevRow现在指向与currRow相同的列表?如果prevRow指向与currRow相同的列表,我应该创建一个新的ArrayList而不是清除....
private ArrayList<Integer> someFunction(ArrayList<Integer> l){
    Collections.sort(l);
    return l;
}
main(){
    ArrayList<Integer> list = new ArrayList<Integer>(Integer(3), Integer(2), Integer(1));
    list = someFunction(list);  //Option 1
    someFunction(list);  //Option 2
}
Run Code Online (Sandbox Code Playgroud)
在类似的问题中,选项1和选项2在上面的代码中做了同样的事情吗?
谢谢-
乔纳森