Java中的传参方式可以分为传值和传引用两种。在使用Long对象作为方法参数时,也是遵循这两种传参方式的。
1. 传值
传值是指在方法调用时,将实际参数的值复制给形式参数,即在方法内部对形式参数的修改不会影响到实际参数的值。对于基本数据类型,如int、char等,都是采用传值方式进行传参。
示例代码如下:
public class PassByValueExample {
public static void main(String[] args) {
Long number = 100L;
modifyValue(number);
System.out.println("number: " + number);
}
public static void modifyValue(Long value) {
value = 200L;
}
}
在上述代码中,定义了一个Long类型的变量number,并将其初始化为100L。然后调用modifyValue方法,传入number作为参数。在modifyValue方法内部,将形式参数value的值修改为200L。但是,在方法调用结束后,打印出的number仍然是100L,因为实际参数number的值并没有被修改。
2. 传引用
传引用是指在方法调用时,将实际参数的引用地址复制给形式参数,即在方法内部对形式参数的修改会影响到实际参数的值。对于对象类型,如String、Long等,都是采用传引用方式进行传参。
示例代码如下:
public class PassByReferenceExample {
public static void main(String[] args) {
LongWrapper wrapper = new LongWrapper(100L);
modifyValue(wrapper);
System.out.println("wrapper.getValue(): " + wrapper.getValue());
}
public static void modifyValue(LongWrapper wrapper) {
wrapper.setValue(200L);
}
}
class LongWrapper {
private Long value;
public LongWrapper(Long value) {
this.value = value;
}
public Long getValue() {
return value;
}
public void setValue(Long value) {
this.value = value;
}
}
在上述代码中,定义了一个LongWrapper类,该类包含一个Long类型的成员变量value,并提供了相应的getter和setter方法。在main方法中,创建了一个LongWrapper对象wrapper,并将其初始化为100L。然后调用modifyValue方法,传入wrapper作为参数。在modifyValue方法内部,通过调用setter方法将wrapper的value修改为200L。最后,打印出的wrapper.getValue()的值为200L,说明实际参数wrapper的值被成功修改。
序列图
下面是上述示例代码的序列图,用于展示方法调用的过程:
sequenceDiagram
participant main
participant modifyValue
participant LongWrapper
main->>modifyValue: 调用modifyValue方法
modifyValue->>LongWrapper: 修改value值为200L
modifyValue-->>main: 返回
main->>LongWrapper: 打印wrapper.getValue()
LongWrapper-->>main: 返回200L
从序列图中可以看出,main方法调用modifyValue方法时,将实际参数wrapper的引用地址传递给了形式参数wrapper。在modifyValue方法内部修改了形式参数wrapper的value值后,main方法可以通过实际参数wrapper获取到修改后的值。
总结起来,Java中的Long对象作为方法参数时,传值是指将实际参数的值复制给形式参数,对形式参数的修改不会影响到实际参数的值;传引用是指将实际参数的引用地址复制给形式参数,对形式参数的修改会影响到实际参数的值。根据具体的需求,选择合适的传参方式可以更好地处理数据。