Java click传递变量_一段话系列-java函数(方法)中的参数传递

为什么说按值传递

广义的说引用也是值。

对象类型传递

当一个对象引用(list)作为一个参数被传递到方法中时,参数就是该对象引用(list)一个副本(listCopy);因为是副本,所以不会影响对象引用(list)的值;

该副本(listCopy)指向同一个对象,通过副本(listCopy)可以改变对象的内容。

代码验证

/**

* @author : bozheng

* @date : 2018/8/12 14:27

*/

public class TestDemo {

@Test

public void test(){

//list为对象的引用

List list = new ArrayList();

//传进去的是list引用的副本

setList1(list);

//外部引用的指向并未变成null,该引用的副本变为了null

System.out.println(list);

//传进去的是list引用的副本

setList2(list);

//改了对象的值

System.out.println(list);

}

public void setList1(List listCopy){

//改变的是引用副本的指向

listCopy = null;

}

public void setList2(List listCopy){

//改变对象的值

listCopy.add("1");

}

}

基本类型传递

当一个基本类型作为参数传递进方法时,传递进去的是基本类型的拷贝。故不会影响外部参数的值。

代码验证

/**

* @author : bozheng

* @date : 2018/8/12 14:27

*/

public class TestDemo {

@Test

public void test(){

int a = 0;

//传递进去的是a的拷贝

setList1(a);

//a的值为改变

System.out.println(a);

}

public void setList1(int aCopy){

aCopy = 1;

}

}

String类型传递

特殊性

String是对象类型,不是基本类型,正常来讲应符合对象类型传递的规则:1.传递进去的是引用的副本;2.引用的副本可改变指向对象的值。

但是如果是这样的话,我也会多此一举把String单独列出来了,大家可以运行一下代码:

/**

* @author : bozheng

* @date : 2018/8/12 14:27

*/

public class TestDemo {

@Test

public void test(){

String a = "hello";

//传递进去的是a的拷贝

setString(a);

//a的值未改变!

System.out.println(a);

}

public void setString(String aCopy){

aCopy = "hi";

}

}

运行代码后发现,a的值并未改变。故String类型传递时虽然是对象类型,但不能通过引用改变对象的值,切记!

值不能改变的原因

通过阅读String的源码可得,String中使用一个char数组进行值的存放,该char数组有final关键字,所以对象的值不可改变,其它对象的包装器类型亦是如此。

三者的共通性

传进去的全部是自身的拷贝。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值