参数传递(值传递与引用传递)

Posted 余磊

tags:

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

按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

1、对象是按引用传递的
2、Java 应用程序有且仅有的一种参数传递机制,即按值传递(引用传值传递的是原始值的内存地址,其实也是一种按值传递)
3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本

技术分享
 1 public class ParamterE2 {
 2     
 3     public static class ParamterE3{
 4         public String name="xiaotiaosi";
 5     }
 6     
 7     public static void run(ParamterE3 paramterE3,String a,int b){
 8         ParamterE3 paramterE=paramterE3;
 9         paramterE.name="xiaohua111";
10         a="girl";
11         b=1;
12     }
13  
14     public static void main(String[] args) {
15         ParamterE2 paramterE2=new ParamterE2();
16         ParamterE3 paramterE3=new ParamterE3();
17         String a="boy";
18         int b=0;
19         paramterE2.run(paramterE3,a,b);
20         System.out.println(paramterE3.name+" "+a+" "+b);
21     }
22 }
技术分享

程序运行的结果为:xiaohua111 boy 0

原始对象内的成员变量name的值改变,原始String类型的变量a 和原始int类型的变量b值没有发生改变。

说明:

1.对象就是传引用
2.原始类型就是传值(boolean 、char、byte、short、int、long、float、double)
3.String类型因为没有提供自身修改的函数,每次操作都是新生成一个String对象,所以要特殊对待。可以认为是传值。

注:通过查资料发现String类型比较特殊,在Java中,String是一个引用类型,但是在作为参数传递的时候表现出来的却是基本类型的特性。
查过相关资料后我觉得是两个原因导致的,一个是String实际上操作的是char[],可以理解为String是char[]的包装类。二是给String变量重新赋值后,实际上没有改变这个变量的值,而是重新new了一个String对象,改变了新对象的值,所以原来的String变量的值并没有改变。







以上是关于参数传递(值传递与引用传递)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 值传递与引用传递的几种情况

C#在方法调用中,参数按值传递与按引用传递的区别是啥?

python中的参数传递

值传递与引用传递

Java 参数传递与值传递

Java——值传递与引用传递