Java中的引用传递和值传递

Java数据类型与对象传递
本文探讨了Java中基本数据类型与对象类型的存储位置及传递方式。解释了基本类型值传递的特点,以及对象通过引用传递的机制。通过实例演示了方法调用中对象引用的变化如何影响原始对象。

Java 中的基本数据类型: intbooleandoublefloatbytecharlongshortvoid 是值传递 ,不是引用传递,存放在 jvm 内存中的 statck ——栈中。

 

对象则是引用传递 ,对象存放在 jvm 内存中的 heap ——堆中,对象的引用则存放在statck——栈中。

 

如果两个引用都指向同一个对象,则其中一个引用改变了对象的值,则另外一个引用也会被影响。

 

对象传递的是引用

如果在方法中把对象 a 作为参数 b 传递,则参数 b 传递的是对象 a 的引用,此时,参数 b 和对象 a 的引用都指向同一个对象 ( 内存地址 ) 。方法执行时,对参数 b 的改变,就是对对象 a 的改变。如果此时,方法中参数 b 指向另外一个引用,则和方法外的对象 a 的引用不同。此时,对参数 b 的改变,不会改变对象 a

 

如下面的代码所示:

 

public class ArrayListTest { 
	public static void main(String args[]){ 		
               List<String> testList = new ArrayList<String>(); 		 
               testList.add("a"); 		
               add(testList); 		
               testList.add("d"); 		
               for(String str:testList){
 			System.out.println(str); 		
               } 
	}
 	
        public static void add(List<String> list){ 		 
                list.add("b"); 		
                list= new ArrayList<String>(); 		
                list.add("c"); 	
          } 
}

 

    刚开始时,在 list= new ArrayList<String>(); 之前,方法 add() 中的参数 list 和方法外面的 testList 这两个引用指向的是同一个对象,对 list 的改变就是对 testList 指向的对象的改变。

new ArrayList<String>() 之后,方法 add() 中的 list 指向了一个新的对象的引用,和 testLIst 指向不是同一个对象,因此此时,对 list 的改变,不会改变 testList 指向的对象。因此输入结果为:

 

a

b

d
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值