1.java中的形参值传递
public static void main(String[] args) {
Integer a=1,b=3;
swap(a,b);//将a,b对象的地址值传递给形参,方法中形参交换地址值
System.err.println("a="+a+",b="+b);
}
static void swap(Integer x, Integer y){//形参,存在栈中,方法结束即弹栈
Integer temp=0;
temp=x;
x=y;
y=temp;
}
main方法最后的输出还是a=1,b=3
2.c语言可以通过引用或者指针来实现两个整数的交换,实质上是通过地址传递来实现两个整数的交换的。
#include<stdio.h>
void swap1(int a,int b)
{
int c;
c=a;
a=b;
b=c;
}
void swap2(int*p1,int *p2)
{
int c;
if(p1&&p2)
{
c=*p1;
*p1=*p2;
*p2=c;
}
}
void main(int argc,char**argv)
{
int a=1;
int b=2;
swap1(a,b);
printf("a=%d,b=%d\n",a,b);
swap2(&a,&b);//&取a,b的地址值,并传入形参,方法中形参交换地址的空间内容,*获取内存内容
printf("a=%d,b=%d\n",a,b);
swap1输出 ,a=1,b=2
swap2输出,a=2,b=1交换成功
3.那么java中如何实现交换?可以通过引用(地址)存的对象set方法或者构造器
public static void main(String[] args) {
User u1 = new User(1, "akil");
User u2 = new User(3, "mmm");
swap2(u1,u2);
System.err.println("u1="+u1.id+",u2="+u2.id);
}
static void swap2(User x, User y){
int t=x.getId();
x.setId(y.getId());
y.setId(t);
}
4.总结:C语言的指针*操作就是用于操作内存空间的,同样java提供的getter/setter以及构造器也是操作内存空间的;
C语言的&操作符是获取地址,赋值给指针变量
java中引用类型变量=C语言指针变量,都是指向某个内存地址;