各位, 请您帮我澄清一下吗?
据我了解(如果我错了,请纠正我),当我将变量传递给方法或类时,我是按值传递的,不是吗?
如果这是真的,那么为什么Java有方法.clone()?
为什么我会问这个问题,因为我很困惑......这是代码: 如果我使用以下代码传递变量,然后在对话框内修改它们,则原始值(外部)也会更改。
DialogChoosePayment mDialogChoosePayment = new DialogChoosePayment(mContext, (ArrayList<Payment>) defaultValues.getPayment(), (ArrayList<Payment>) selectedValues);
mDialogChoosePayment.show();
但是,如果我使用以下变量,则变量值(来自外部的原始变量)不会更改。
DialogChoosePayment mDialogChoosePayment = new DialogChoosePayment(mContext, (ArrayList<Payment>) defaultValues.getPayment().clone(), (ArrayList<Payment>) selectedValues.clone());
mDialogChoosePayment.show();
请向新手解释一下=)
最佳答案
来源:http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html
传递原始数据类型参数
原始参数(例如 int 或 double)被传递到按值的方法。这意味着对参数值的任何更改仅存在于该方法的范围内。当方法返回时,参数消失并且对它们的任何更改都将丢失。传递引用数据类型参数
引用数据类型参数(例如对象)也会传递到方法中按值(value)。这意味着当该方法返回时,传入的引用仍然引用与之前相同的对象。但是,如果对象字段具有适当的访问级别,则可以在方法中更改它们的值。关于java - 对 Java 传递方法(按值或引用)感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522440/