Java的引用类型常用的四种方法包含:按值传递、按引用传递、按可变长数组传递、按包装类传递。接下来我会结合示例详细介绍这四种方法。
按值传递
按值传递是将方法外部的值复制到方法内部,在方法中操作该值,但不会对原始值造成影响。示例代码如下:
public class Main {
public static void main(String[] args) {
int a = 10;
change(a);
System.out.println(a); // Output: 10
}
public static void change(int b) {
b = 20;
}
}
在上面的示例中,我们定义了一个 change
方法,该方法按值传递一个 b
参数。在方法内部将 b
的值修改为 20,但是在 main
方法中输出 a
的值仍为 10,说明按值传递没有改变原始值。
按引用传递
按引用传递是将方法外部的对象的引用复制到方法内部,传递的是实际地址,方法内部操作该引用所指向的对象,如果对该对象做出更改,那么将影响到原始的对象。示例代码如下:
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
change(sb);
System.out.println(sb.toString()); // Output: Hello world
}
public static void change(StringBuilder s) {
s.append(" world");
}
}
在上面的示例中,我们定义了一个 change
方法,该方法按引用传递一个 s
参数。在方法内部将 s
的值修改为 Hello world
,在 main
方法中输出 sb.toString()
的值为 Hello world
,说明按引用传递改变了原始对象。
按可变长数组传递
按可变长数组传递是指将传递给方法的数组复制一份,变成可变长数组,复制后在方法中进行操作,如果对复制的可变长数组做出更改,那么将不会对原始数组产生影响。示例代码如下:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
change(arr);
System.out.println(Arrays.toString(arr)); // Output: [1, 2, 3]
}
public static void change(int[] arr) {
arr = Arrays.copyOf(arr, arr.length + 1);
arr[arr.length - 1] = 4;
}
}
在上面的示例中,我们定义了一个 change
方法,该方法按可变长数组传递一个 arr
参数。在方法内部将 arr
数组扩充为 [1, 2, 3, 4]
,在 main
方法中输出 Arrays.toString(arr)
的值为 [1, 2, 3]
,说明按可变长数组传递没有改变原始值。
按包装类传递
按包装类传递是指将基本数据类型包装成对象传递给方法,由于对象是引用类型,所以传递的是对象的引用,能够改变原始的对象。示例代码如下:
public class Main {
public static void main(String[] args) {
Integer a = 10;
change(a);
System.out.println(a); // Output: 20
}
public static void change(Integer b) {
b = 20;
}
}
在上面的示例中,我们定义了一个 change
方法,该方法按包装类传递一个 b
参数。在方法内部将 b
的值修改为 20,在 main
方法中输出 a
的值为 20,说明按包装类传递改变了原始对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的引用类型常用的四种方法 - Python技术站