public void swap(int x, int y){
int temp = x;
x = y;
y = temp;
}
int a = 1;
int b = 2;
system.out.println("a = " + a + "; b = " + b);
swap(a,b);
system.out.println("a = " + a + "; b = " + b);
最经典的交换的例子。上面的swap函数本意是想交换传入的参数 a和b的值, 但是实际上是没有交换的,可以完成测试程序观测。
原因在于在函数内部,x和y是函数内部生成的局部变量,得到的只是a和b的值,即1和2,我们对x和y做的操作的确生效了,但是并没有影响到外部的变量a和b,所以a和b的值不变。
java的传值只针对基本数据类型,int,byte,char等等;而所有的对象引用传递全是传址。
传值---传递基本数据类型参数
public class PassValue{
static void exchange(int a, int b){//静态方法,交换a,b的值
int temp;
temp = a;
a = b;
b = temp;
}
public static void main(String[] args){
int i = 10;
int j = 100;
System.out.println("before call: " + "i=" + i + "\t" + "j = " + j);//调用前
exchange(i, j); //值传递,main方法只能调用静态方法
System.out.println("after call: " + "i=" + i + "\t" + "j = " + j);//调用后
}
}
运行结果:
before call: i = 10 j = 100
after call: i = 10 j = 100
说明:调用exchange(i, j)时,实际参数i,j分别把值传递给相应的形式参数a,b,在执行方法exchange()时,形式参数a,b的值的改变不影响实际参数i和j的值,i和j的值在调用前后并没改变。
String str1 = "123";
String str2 = new String("123");
str2 = str1;
System.out.println(str1.equals(str2));
System.out.println(str2.equals("123"));
System.out.println(str2=="123");
|