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()
。
在创建日历应用程序的过程中,表示当前日期的日历变量被设置为参数。我把它复制到一个叫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()
。