Java函数的返回值类型和返回值传递的方式
Java函数的返回值类型和返回值传递的方式
Java函数的返回值是指在函数执行完毕后,将结果返回给调用者的数据类型。返回值的类型在函数定义时就确定了,而返回值的传递方式有两种:值传递和引用传递。
1. 返回值类型
Java的数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型包括int、double、char等,引用数据类型包括类、数组、接口等。
在函数定义时,需要使用return关键字来返回一个值。返回值类型必须和函数定义时指定的类型一致,否则编译会报错。
例如,下面的函数返回一个整数值:
public int add(int a, int b) {
return a + b;
}
如果返回值的类型和函数定义时指定的类型不一致,编译时会提示错误。例如,下面的函数定义返回一个字符串类型,但是实际返回一个数字类型:
public String test(int a) {
return a;
}
编译时会报错:
incompatible types: int cannot be converted to java.lang.String
2. 值传递
值传递是指将实参的值复制一份传递给函数,在函数中对参数的修改不会影响到实参的值。在Java中,基本数据类型的参数传递是值传递。
例如,下面的函数调用中,参数a和b是基本数据类型,将它们的值复制了一份传递给函数add:
int a = 2; int b = 3; int c = add(a, b);
在函数执行时,a和b的值不会被修改。
public int add(int x, int y) {
x++;
y++;
return x + y;
}
在函数执行后,a和b的值依然是2和3。
3. 引用传递
引用传递是指将实参的引用复制一份传递给函数,在函数中对参数的修改会影响到实参。在Java中,除了基本数据类型以外的参数传递都是引用传递。
例如,下面的函数调用中,参数p是一个数组类型,是引用数据类型:
int[] p = {1, 2, 3};
change(p);
System.out.println(Arrays.toString(p));
在函数执行时,参数p的引用被复制一份,传递给函数change。在函数中修改数组的值后,会影响到外部的实参。
public static void change(int[] p) {
p[0] = 10;
p[1] = 11;
p[2] = 12;
}
在函数执行后,数组的值已经被修改了。
[10, 11, 12]
注意:虽然引用传递可以修改实参的值,但是引用本身并没有被修改。例如,下面的函数不会修改参数的引用:
public static void changeRef(int[] p) {
p = new int[] {4, 5, 6};
}
在这个函数中,将p的引用修改为一个新的数组,但是并不会影响到外部的实参。
int[] q = {1, 2, 3};
changeRef(q);
System.out.println(Arrays.toString(q));
输出依然是原始的数组:
[1, 2, 3]
总结
Java函数的返回值类型在函数定义时就被确定了,必须和实际返回值的类型一致。函数的返回值的传递方式有两种:值传递和引用传递。基本数据类型的参数传递是值传递,而其他类型的参数传递都是引用传递。在引用传递中,实参的引用被复制一份传递给函数,对参数的修改会影响到实参的值。
