Java参数传递机制

Java中的参数传递发生在方法调用中  。

有的时候传递一个基本类型的变量   然后方法中改变参数的值 ,原先的变量并不会被改变。

但是当传递一个非String类型的对象时 ,方法中改变这个传入的对象,原先的对象会被改变。

这些情况,需要分析总结一下 。


先说一下Java  参数传递的两种规则:

1)按值传递;   使用这种方式传参,原先的参数的值不发生改变,因为只是将这个参数的值copy 一份,然后传入方法


2)按址传递;   这种方式是将参数在内存中的存储地址传入到方法中,方法内部通过存储地址改变存储区域的内容,由于参数的存储地址只有一个,在方法内部修改参数的值时,参数原始的值也发生改变


Java中对这两种规则的使用有明确的要求:

不同的数据类型对应不同的传递规则;

(1) 八种基本类型(int ,char,  double等)   和  String                         对应  按值传递

为什么有String ,虽然String对象也是按址传递,但是这个对象是不能被改变的,一旦改变就产生新对象,即原有的String引用指向了新的对象

所以也相当是属于按值传递。

例:

 class test {
        String str = new String("hello");

        public void change(String str) {
            str = "OK";
        }
        public static  void main(String[] args){
            test t= new  test();
            t.change(t.str);
            System.out.print(t.str);
        }
    }
//  传递的是成员变量str,但是由于是按值传递,所以最后打印出:hello

(2) 除String以外的所有复合数据类型,包括数组、类和接口 对应 按址传递

因为这些都属于引用类型,创建的对象都对应一个对象引用,传参的时候只是传递一个对象引用,即对象存储位置的指针。


需要注意的是: 在有些按址传递的过程中,不想改变原先对象的值,可以重新构建一个对象 。如:

public class test {

	public static void main(String[] args) {

		int[] a = { 1, 2, 3 };
		set(a);
		System.out.println(a[0]);

	}

	public static void set(int[] m) {

		int[] n = new int[m.length];
		for (int i = 0; i < m.length; i++) {
			n[i] = m[i];
		}
		n[0] = 10;
	}

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值