java - 对 Java 传递方法(按值或引用)感到困惑

标签 java pass-by-reference pass-by-value

各位, 请您帮我澄清一下吗?

据我了解(如果我错了,请纠正我),当我将变量传递给方法或类时,我是按值传递的,不是吗?

如果这是真的,那么为什么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/

相关文章:

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

c++ - 是否有编译器警告是 Visual Studio 2013 检测复制的引用而不是通过引用分配的引用

Java - 四舍五入 99999999999999.9999

java - Java中数据和文本的旋转坐标平面

java - 销毁 Jframe 对象

c++ - 在 C++ 函数参数中使用 & 运算符 : pass-by-rvalue-reference

C++,通过引用传递堆栈上的二维数组以运行

c - 使用 C 将 char * 传递给 fopen

对函数调用中的单指针和双指针参数感到困惑

java - Selenium、java 和 Testng 用于自动化,识别元素的方法