Java中方法参数及其传递问题
1.基本数据类型传递:指的是在方法调用时,传递的是值的拷贝。对方不管怎么改值,都不影响原来的值。
import java.util.Scanner;
public class ScannerTest {
public static void main(String args[]){
int x = 5;
System.out.println("方法调用之前x="+x);
change(x);
System.out.println("方法调用之后x="+x);
}
private static void change(int x) {
x = 100;
System.out.println("方法中x="+x);
}
}
运行结果
方法调用之前x=5
方法中x=100
方法调用之后x=5
2.引用数据类型传递:指的是在方法调用时,传递的参数是按引用进行传递其实传递的引用的地址也就是变量所对应的内存空间的地址。
(1)数组传递
import java.util.Scanner;
public class ScannerTest {
public static void main(String [] args){
int a[] = {3,8,5,0,7,2};
System.out.println("排序之前的数据为:");
for(int temp : a){
System.out.print(temp+" ");
}
//通过调用一个方法实现
//在main方法中调用sort方法
ScannerTest m = new ScannerTest();
m.sort(a);
System.out.println();
System.out.println("排序之后的数据为:");
for(int temp:a){
System.out.print(temp+" ");
}
}
//定义一个方法来实现冒泡排序
public static void sort(int b[]){
int temp;
for(int i=0;i<b.length-1;i++){
for(int j=0;j<b.length-i-1;j++){
if(b[j] > b[j+1]){
temp = b[j];
b[j] = b[j+1];
b[j+1] = temp;
}
}
}
}
}
运行结果
排序之前的数据为:
3 8 5 0 7 2
排序之后的数据为:
0 2 3 5 7 8
(2)对象传递
import java.util.Scanner;
public class ScannerTest {
private int x;
public static void main(String [] args){
ScannerTest a = new ScannerTest();
a.x = 5;
System.out.println("方法调用之前x="+a.x);
change(a);
System.out.println("方法调用之后x="+a.x);
}
private static void change(ScannerTest a) {
a.x = 100;
System.out.println("方法中x="+a.x);
}
}
运行结果
方法调用之前x=5
方法中x=100
方法调用之后x=100
总之,按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值。