`
lhx1026
  • 浏览: 301218 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Java中的引用传递和值传递

    博客分类:
  • java
阅读更多

Java 中的基本数据类型: int boolean double float byte char long short void 是值传递 ,不是引用传递,存放在 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
 

 

0
0
分享到:
评论
2 楼 lhx1026 2011-08-24  
174374756 写道
Java中的基本数据类型应该是放在栈中(stack)的吧

哦,对,写错了。多谢提醒
1 楼 174374756 2011-08-23  
Java中的基本数据类型应该是放在栈中(stack)的吧

相关推荐

Global site tag (gtag.js) - Google Analytics