java中没有引用传递_Java中没有引用传递只有值传递(在函数中)

/*** @description Java中没有引用传递只有值传递

*

*@authorAlexia

* @date 2013-10-16

**/

classPerson {privateString name;privateString sex;publicPerson(String x, String y) {this.name =x;this.sex =y;

}//重写toString()方法,方便输出

publicString toString() {return name + " " +sex;

}//交换对象引用,这里的p1和p2是swapObject这个函数的变量(局部变量),//p1、p2接收的就是传递进来的一个堆内存的地址,改变p1、p2的指向只是改变了这两个局部变量的指向。//实际的全局变量还是没变的

public static voidswapObject(Person p1, Person p2) {

Person tmp=p1;

p1=p2;

p2=tmp;

}//交换基本类型

public static void swapInt(int a, intb) {int tmp =a;

a=b;

b=tmp;

}//交换对象数组

public static voidswapObjectArray(Person[] p1, Person[] p2) {

Person[] tmp=p1;

p1=p2;

p2=tmp;

}//交换基本类型数组

public static void swapIntArray(int[] x, int[] y) {int[] tmp =x;

x=y;

y=tmp;

}//改变对象数组中的内容

public static voidchangeObjectArray(Person[] p1, Person[] p2) {

Person tmp= p1[1];

p1[1] = p2[1];

p2[1] =tmp;//再将p1[1]修改

Person p = new Person("wjl", "male");

p1[1] =p;

}//改变基本类型数组中的内容

public static void changeIntArray(int[] x, int[] y) {int tmp = x[1];

x[1] = y[1];

y[1] =tmp;

x[1] = 5;

}

}public classByValueTest {public static voidmain(String[] args) {//建立并构造两个对象

Person p1 = new Person("Alexia", "female");

Person p2= new Person("Edward", "male");

System.out.println("对象交换前:p1 = " + p1.toString()); //Alexia female System.out.println("对象交换前:p2 = " + p2.toString()); //Edward male

//交换p1对象和p2对象

Person.swapObject(p1, p2);//从交换结果中看出,实际对象并未交换

System.out.println("对象交换后:p1 = " + p1.toString()); //Alexia female System.out.println("对象交换后:p2 = " + p2.toString()); //Edward male

//建立两个对象数组

Person[] arraya = new Person[2];

Person[] arrayb= new Person[2];//分别构造数组对象

arraya[0] = new Person("Alexia", "female");

arraya[1] = new Person("Edward", "male");

arrayb[0] = new Person("jmwang", "female");

arrayb[1] = new Person("hwu", "male");

System.out.println("对象数组交换前:arraya[0] = " + arraya[0].toString() + ", arraya[1] = "

+ arraya[1].toString()); //Alexia female,Edward male System.out.println("对象数组交换前:arrayb[0] = " + arrayb[0].toString() + ", arrayb[1] = "

+ arrayb[1].toString()); //jmwang female,hwu male

//交换这两个对象数组

Person.swapObjectArray(arraya, arrayb);

System.out.println("对象数组交换后:arraya[0] = " + arraya[0].toString() + ", arraya[1] = "

+ arraya[1].toString()); //Alexia female,Edward male System.out.println("对象数组交换后:arrayb[0] = " + arrayb[0].toString() + ", arrayb[1] = "

+ arrayb[1].toString()); //jmwang female,hwu male

//建立两个普通数组

int[] a = new int[2];int[] b = new int[2];//给数组个元素赋值

for (int i = 0; i < a.length; i++) {

a[i]=i;

b[i]= i + 1;

}

System.out.println("基本类型数组交换前:a[0] = " + a[0] + ", a[1] = " + a[1]); //0,1 System.out.println("基本类型数组交换前:b[0] = " + b[0] + ", b[1] = " + b[1]); //1,2

//交换两个基本类型数组

Person.swapIntArray(a, b);

System.out.println("基本类型数组交换后:a[0] = " + a[0] + ", a[1] = " + a[1]); //0,1 System.out.println("基本类型数组交换后:b[0] = " + b[0] + ", b[1] = " + b[1]); //1,2

//改变对象数组的内容

Person.changeObjectArray(arraya, arrayb);

System.out.println("对象数组内容交换并改变后:arraya[0] = " + arraya[0].toString() + ", arraya[1] = "

+ arraya[1].toString()); //Alexia female,wjl male System.out.println("对象数组内容交换并改变后:arrayb[0] = " + arrayb[0].toString() + ", arrayb[1] = "

+ arrayb[1].toString()); //jmwang female,Edward male

//改变基本类型数组的内容

Person.changeIntArray(a, b);

System.out.println("基本类型数组内容交换并改变后:a[0] = " + a[0] + ", a[1] = " + a[1]); //0,5 System.out.println("基本类型数组内容交换并改变后:b[0] = " + b[0] + ",b[1] = " + b[1]); //1,1}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值