传值传引

传值

关于传值问题,我们可以先来看看以下代码:

1		public void fuzhi(){
2			int x = 1;
3			this.change(x);
4			System.out.println(x);
5		}
6		public void change(int i){
7			i=10;
8		}

这个代码最后输出的结果为1。
为什么是1而不是10呢?
首先我们先来说一下数据类型
我们知道在Java中有这些数据类型:
第一类:逻辑型 boolean
第二类:字节型 byte
第三类:文本型 char
第四类:数值型

  • 整数型(long,short,int)
  • 浮点型(float,double)

我们再来看之前的代码,在执行到第二行代码时,整数型变量x被赋予了一个值:1,在内存中即:
【变量x】→1
在第三行调用change方法时,这里并不是直接将x指向了change方法中的值,而是多做了一个步骤:将变量x拷贝了一次,将这个拷贝过的x使用调用的方法change。所以第四行输出的x还是原来的x,也就是1。这就是传值问题。简单来说:

  • 【变量x】→1
  • 拷贝x
  • 【变量x(拷贝)】→10
  • 输出原来的变量x

一般来说,如果一个数据类型是简单类型的,那么它就是值传递。

传引用

关于传引用,有这样一段代码:

1		public void fuzhi(){
2			StringBuffer x = new StringBuffer("Good");
3			this.change2(x);
4		System.out.println(x);
5		}
6		public void change2(StringBuffer i){
7			i.append(" moring!");
8		}

这段代码的运行结果却不是原来的变量值Good了,而是Good moring!
这里面又发生了什么神奇的事情呢?

这里的数据类型已经不再是简单类型,这里传递的是类的引用:

第二行【变量x】→Good
第三行在调用change2时变量i指向了x指向的内存空间,所以在调用append时,仍然是在刚开始的变量x上作调整。所以【变量x】→Good moring

总的来说,当一个变量是简单的数据类型时,它就是值传递,对值的拷贝做改变,而对于类的实例它采用的是类的引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值