码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-04-24 17:13:50      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:按值传递   副本   oat   ati   class   通过   string   main   引用传递   

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

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变量的值并没有改变。

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

标签:按值传递   副本   oat   ati   class   通过   string   main   引用传递   

原文地址:http://www.cnblogs.com/yulei126/p/6757558.html

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