Java函数中如何传递和返回引用类型和值类型的数据
Java中有两种基本的数据类型:引用类型和值类型。
值类型的特点是它们的值被存储在固定大小的存储单元中。它们可以是int,float,double,boolean等。
引用类型是指对象的引用,如String,Array,List等。它们的值是存储在堆中的对象的地址。
在Java中,函数可以传递和返回引用类型和值类型的数据。下面将分别讨论这两种情况。
1. 传递和返回值类型的数据
在Java中,函数通过参数和返回值传递值类型的数据。
传递值类型的数据时,仅仅传递了该数据的副本,该数据的原始值不会受到影响。例如:
public static void main(String[] args) {
int a = 10;
changeValue(a);
System.out.println(a); // 输出10,a的值未改变
}
public static void changeValue(int a) {
a = 20;
}
在上面的代码中,我们在main函数中定义了一个变量a并赋值为10。然后将a作为参数调用了changeValue函数。changeValue函数通过参数a获取到了a的副本,在函数内部将a赋值为20,但是这个变化并没有影响到原始的a的值。
返回值类型的数据时,函数返回一个值类型的值。例如:
public static int add(int a, int b) {
int result = a + b;
return result;
}
public static void main(String[] args) {
int result = add(1, 2);
System.out.println(result); // 输出3
}
在上面的代码中,add函数接受两个参数a和b,并返回它们的和。在main函数中调用add函数,并将返回值存储在变量result中,然后将result输出到控制台。
2. 传递和返回引用类型的数据
在Java中,函数通过参数和返回值传递引用类型的数据。
传递引用类型的数据时,函数传递的是该引用类型数据的引用,可以通过该引用修改原始数据的属性值。例如:
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
changeValue(sb);
System.out.println(sb.toString()); // 输出world
}
public static void changeValue(StringBuilder sb) {
sb.append(" world");
}
在上面的代码中,我们在main函数中定义了一个StringBuilder对象sb,并将其初始化为“hello”。然后将sb作为参数调用了changeValue函数。changeValue函数通过参数sb获取到了sb的引用,在函数内部将sb的值修改为“hello world”。
返回引用类型的数据时,函数返回一个引用类型的值。例如:
public static ArrayList<String> getList() {
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
return list;
}
public static void main(String[] args) {
ArrayList<String> list = getList();
System.out.println(list.get(0)); // 输出hello
}
在上面的代码中,getList函数创建了一个ArrayList对象并添加“hello”这个元素,然后返回该对象的引用。在main函数中,我们通过调用getList函数获取到了一个ArrayList对象,并将其存储在list变量中。然后我们通过调用list的get方法获取到了该列表的 个元素并输出到控制台。
总结
Java中可以传递和返回值类型的数据和引用类型的数据。
传递值类型的数据时,函数传递的是该值类型数据的副本,函数内部对该副本的修改不会影响到原始值。
返回值类型的数据时,函数返回一个值类型的值。
传递引用类型的数据时,函数传递的是该引用类型数据的引用,在函数内部对该引用修改会影响到原始数据的属性值。
返回引用类型的数据时,函数返回一个引用类型的值。
