java pass by value_在Java里面谁能解释一下 pass by reference 还有pass by value?

展开全部

pass by reference 和pass by value 分别是指的是引用传递32313133353236313431303231363533e4b893e5b19e31333335343432和值传递。

1、对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没用改变。

2、对于对象类型,也就是object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。public class tester {

public static void main(string[] args) {

int primitive = 2;

changeprimitive(primitive);

//primitive的值依然是2

myclass myclass = new myclass();

changeobject(myclass);

//myclass仍然指向的是执行changeobject之前的那个对象

//但是myclass.i等于3了

}

public static void changeprimitive(int primitive) {

primitive = 3;

}

public static void changeobject(myclass myclass) {

myclass.i = 3;

myclass = new myclass();

}

}

class myclass {

int i;

}

对于远程调用,无论是什么类型,调用结束后,传入的参数和以前没用任何变化(当然前途是直接调用远程方法,如果中间经过其它的proxy类或者facade类,不能保证那些类对对象没用修改)。至于是通过local接口进行调用的,也应该属于本地调用,和上面说的情况应该是一致的。

***************************************************************************************************************

package java2;

public class Test2 {

public static void main(String[] args) {

StringBuffer a = new StringBuffer("A");

StringBuffer b = new StringBuffer("B");

operate(a, b);

System.out.println(a + "," + b);

int k = 1;

double A[] = { 1, 2, 3 };

changeOrNot(k, A);

System.out.println("k: " + k);

System.out.println("A[0]: " + A[0]);   System.out.println("A[1]: " + A[1]);   System.out.println("A[2]: " + A[2]);

}

public static void operate(StringBuffer x, StringBuffer y) {

x.append(y);  //修改是生效的,方法调用结束后,它的成员是新的值

y = x;//object的子类,如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。

y.deleteCharAt(0);

}

public static void changeOrNot(int i,double x[]) {

i = -1; //原始数据类型,变量的值没用改变。

x[0] = -2.0;//object的子类,修改是生效的,方法调用结束后,它的成员是新的值

double y[] = x;

y[1] = -3.0;

double z[] = { 4.0, 4.0, 4.0 };

x = z;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值