java中的值传递和引用传递

Java中没有指针,所以也没有引用传递了,仅仅有值传递 不过可以通过对象的方式来实现引用传递 类似java没有多继承 但可以用多次implements 接口实现多继承的功能
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 

数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

Java参数按值传递

面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 
    答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。

    1、基本类型的,是传值
    2、对象类型的是传引用
    3、特殊类型的,比如String,额外分析,String 比较特别,看过String 代码的都知道, String 是  final 的。所以值是不变的。 函数中String对象引用的副本指向了另外一个新String对象,而数组对象引用的副本没有改变,而是改变对象中数据的内容.


public static void main(String[] args) {
	 List<String> list = new ArrayList<String>();
	 list.add("aaa");
	 list.add("bbb");
	 list.add("ccc");
	 
	 for(int i=0; i<list.size();i++){
		 String str = list.get(0);     此处相值传递
		 str ="ddd";             
	 }
       System.out.println(list.get(0));
       System.out.println(list.get(1));
       System.out.println(list.get(2));
		
		 List<Map> list1 = new ArrayList<Map>();
		 Map map1 = new HashMap();
		 map1.put("ss", "DDD");
		 list1.add(map1);
		 list1.add(map1);
		 list1.add(map1);
		 
		 for(int i=0; i<list1.size();i++){
			 Map ap = list1.get(0);   //此处相当于引用传递
			 ap.put("cc", "FFF");
		 }
	       System.out.println(list1.get(0).get("cc"));
	       System.out.println(list1.get(1).get("cc"));
	       System.out.println(list1.get(2).get("cc"));
	}

结果:

aaa
bbb
ccc
FFF
FFF
FFF





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值