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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java传递参数是传值还是传引用相关的知识,希望对你有一定的参考价值。

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

先看个栗子:

技术分享
 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传递参数是传值还是传引用的主要内容,如果未能解决你的问题,请参考以下文章

Go语言参数传递是传值还是传引用

参数传递

python函数传参是传值还是传引用?

python中给函数传参是传值还是传引用

转载Java是传值还是传引用

String的按值传递,java传参都是传值(转)