示例代码
public class JavaValueDemo {
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println("before:a="+a+",b="+b);
swap(a,b);
System.out.println("after:a="+a+",b="+b);
String s1="hello";
String s2="java";
System.out.println("before:s1="+s1+",s2="+s2);
swap(s1,s2);
System.out.println("after:s1="+s1+",s2="+s2);
int[] arr={1,2,3,4,5};
System.out.println("before arr[0]:"+arr[0]);
changeArr(arr);
System.out.println("after arr[0]:"+arr[0]);
}
// 引用类型也是值传递,只是传递的是地址值
public static void changeArr(int[] arr){
arr[0]=0;
}
public static void swap(int a,int b){
int temp=a;
a=b;
b=temp;
System.out.println("swap:a="+a+",b="+b);
}
public static void swap(String s1,String s2){
/*String temp=s1;
s1=s2;
s2=temp;*/
s1="chage hello";
s2="chage java";
System.out.println("swap:s1="+s1+",s2="+s2);
}
}
执行结果
before:a=10,b=20
swap:a=20,b=10
after:a=10,b=20
before:s1=hello,s2=java
swap:s1=chage hello,s2=chage java
after:s1=hello,s2=java
before arr[0]:1
after arr[0]:0
结论
Java中只有值传递,没有引用传递,引用类型传递的是地址值。