码迷,mamicode.com
首页 > 编程语言 > 详细

java传递参数是传值还是传引用

时间:2016-03-28 08:50:11      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

这个问题,网上一查越看越迷糊,纠结完了先总结下

先看个栗子:

技术分享
 1 public class Example {
 2 
 3     public void change(String str1, StringBuffer sbr1, char[] ch1, int a) {
 4         str1 = "world";
 5         sbr1.append("world");
 6         ch1[0] = ‘g‘;
 7     }
 8 
 9     public static void main(String args[]) {
10         String str = "hello";
11         StringBuffer sbr = new StringBuffer("hello");
12         char[] ch = { ‘a‘, ‘b‘ };
13         new Example().change(str, sbr, ch);
14         System.out.println(" str=" + str + "\n sbr=" + sbr + "\n ch[0]=" + ch[0]);
15     }
技术分享

16 }

输出结果: 技术分享View Code

  基本数据类型参数传递时按值这是没问题的,主要是对于引用数据类型传递的纠结

  java参数传递不存在引用传递 

  //参考Horstmann在java核心技术卷一 p123的栗子

 public static void swap(Employee x,Employee y){

技术分享
Employee temp=x;
x=y;
y=temp;
}
main...{
Employee a=new Employee("jack");
Employee b=new Employee("rose");
swap(a,b);
}
技术分享

  这个例子看来,java肯定不是传引用了

 

 来看下概念: 

 按值传递:方法接收的是原始值得副本

 按引用传递:方法接收的是原始值的内存地址

 java引用:java里面对于引用数据类型,stack里面会把一个可以指向heap里面目标对象的内存地址赋给一个变量,这个变量也叫引用

 

  基本数据类型是传值这是肯定的,那么这个问题考虑完后就是这样的,对于引用数据类型

   copy一个刚好叫做“引用”的东西传过去是叫他传引用还是传值呢 ?  (传的方式、传的东西)

  

 

不要纠结了,能理解就好了    【当然形式上看还是传值,传了个引用的副本】

可以这样想,java参数传递相当于一个"="过程,它有3个特点 

1."="对于基本数据类型是直接复制值,对于引用数据类型是复制的引用 

2."="放弃原来的值、引用,重新获得左边的值、引用

3.复制完成左边右边就没关系了

 

总结:java参数传递等价于java里面的"=" 

java传递参数是传值还是传引用

标签:

原文地址:http://www.cnblogs.com/laseine/p/5327687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!