java 参数传递

程序传递参数有按值传递和引用调用两种,按值传递是将一个参数值复制成子程序的正式参数,子程序的参数的改变不影响它调用的参数;引用调用是参数的引用而不是参数值被传递给子程序,在子程序中,该引用用来访问调用中制定的实际参数,对子程序参数的改变将会影响被子程序调用的参数。

对于原始数据类型,参数传递是传值的,在方法中修改了参数值,方法调用结束后,那个变量的值并没有发生改变。也就是在参数传递的过程中,该变量的值在方法调用期间会复制给形参,因为形参是方法的局部变量,所以对形参做出的任何修改在调用结束后都不会影响该变量的值。

如果传递的是指向对象的引用,那么就会传递引用值。这就意味着,在方法调用期间,实参和形参都是该引用值所代表的对象的别名。

示例如下:

public static void main(String[] args) {
	        int val;
    		StringBuffer sb;
    		String str="ads";
    		val=10;
    		sb=new StringBuffer("pears");
    		System.out.println("val is"+val);
    		System.out.println("str is"+str);
    		System.out.println("sb is"+sb);
    		System.out.println("");
    		System.out.println("calling modify");
    		modify(val,str,sb);
    		System.out.println("return from modify");
    		System.out.println("");
    		System.out.println("val is"+val);
    		System.out.println("str is"+str);
    		System.out.println("sb is"+sb);				
    }
    public static void modify(int a,String r1,StringBuffer r2){
    	System.out.println("in modify...");
    	a=0;
    	System.out.println();
    	r1="ddd";
    	r2.append("taste good");
    	r2=new StringBuffer("test");
    	System.out.println("a is"+a);
    	System.out.println("r1 is"+r1);
    	System.out.println("r2 is"+r2);	
    	}
}
运行结果:

val is10
str isads
sb ispears

calling modify
in modify...

a is0
r1 isddd
r2 istest
return from modify

val is10
str isads
sb ispearstaste good
示例中,定义了原始数据变量val和两个对象引用变量str和sb,方法调用过程中,变量val将值传递给了形参,执行方法后,val并没有发生改变;

对象引用变量sb,传递的是一个对象的引用值,在方法调用期间,实参和形参都是指向一个对象的引用,所以当在方法调用过程中,对该对象的引用会导致对象的变化,这种变化在方法调用后也是存在的;

String并不是一个原始数据类型的变量,它在方法调用后没有发生变化,是由于String是特殊的对象,它不能被改写,String是一个支持非可变性的类,这种类的特点是状态固定(不存在任何修改对象的方法),在该对象的生存周期内,它的值是永远不变的(它是线程安全的)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值