Android工作室是否修改了参数值?

Does the Android studio modify the parameter values?

在创建日历应用程序的过程中,表示当前日期的日历变量被设置为参数。我把它复制到一个叫cal的日历变量中,在把cal的日期改成1的过程中,selectedDate变量也变成了一天。

    public ArrayList<String> setCalendarDate(Calendar selectedDate){
    ArrayList <String> dateArray = new ArrayList();
    Calendar cal = selectedDate;
    Log.e("cp_1", String.valueOf(selectedDate.get(Calendar.DATE)));
    cal.set(Calendar.DATE,1);
    Log.e("cp_2", String.valueOf(selectedDate.get(Calendar.DATE)));
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;
    int lengthOfMonth = cal.getActualMaximum(Calendar.DATE);
    for (int i = 1; i <= 42; i++) {
        if(i<= dayOfWeek || i> (lengthOfMonth + dayOfWeek))
            dateArray.add("");
        else dateArray.add(String.valueOf(i-dayOfWeek));
    }
    return dateArray;
}

这是函数。

当您将参数传递给函数时,您传递的是对变量的引用。你不是在复制被引用的对象,你只是传递一个指向它的指针。当您设置 cal=selectedDate 时,您在做同样的事情 - 设置对对象的引用,而不是复制它。这意味着 selectedDate 和 cal 都指向同一个对象。所以改变一个会改变两者(因为它们是同一件事)。如果你想制作一个副本以便改变一个不会改变另一个,你需要明确地这样做。 Calendar 提供了创建对象副本的 clone() 方法。因此,如果您希望制作一个可以在不更改原件的情况下进行更改的副本,请将您的代码更改为 cal=selectedDate.clone()