java参数传递
来源:互联网 发布:如何用王家卫 知乎 编辑:程序博客网 时间:2024/05/16 15:56
一直以来对java的参数传递总是一知半解的,今天打算彻底阐述一下。
值传递和引用传递
值传递:传递的就是参数值的拷贝。首先传递的事参数的值,其次是拷贝。改变传递后的值,原来的值是不会改变的。
引用传递:传递的是参数的地址(可以理解c语言中指针)。改变传递来的值,会引发原来的值改变
c语言中这个东西很好理解,如果传递的事值就是值传递,如果传的是引用的话就是引用(地址,指针等等)传递,但是java中就会出现问题,因为java没有引用,没有指针,难道就没有引用传递了?对还真没有引用传递,都是值传递。只不过 java传递对象时传递的是对象的句柄(在栈上的值,这个值存的是堆上对象的地址),所以也是一种值传递,到底是拷贝后的栈上的句柄还是直接传的句柄,就不清楚了,我倾向于和java那种传递拷贝后的值,但可以肯定的是传递的值,是值传递。
Test t = new Test()
这里的这个new语句,t在栈上分配的内存,new关键字表示在堆上分配内存。我们一般传递的就是t,这是一个在栈上的值,所以Java传递句柄t就是值传递
java 所有的传递都是值传递 传递的是 栈上的 值的拷贝
下面将讲述Java常见的3种传递,基础类型传递,引用类型传递
基础类型传递
int a = 12;public int fun(a){ return ++a;}sysout("--a--"+a);
这里的a 输出的值还是12
基础类型的内存分配是在栈上分配的,传递的是在栈上的值的拷贝,所以是值传递,不会影响原来的值
引用类型传递
@Test public void testChangeValue() { TestBean bean = new TestBean(); bean.setFistname("tang"); bean.setLastname("chuan"); System.out.println("before change value---->"+bean); changeValue(bean); System.out.println("after change value----->"+bean); TestBean u2 = new TestBean(); u2.setFistname("Lily"); u2.setLastname("Green"); System.out.println("Before change ref,user2 is :" + u2.toString()); changeRef(u2); System.out.println("After change ref,user2 is :" + u2.toString()); } public void changeRef(TestBean u) { TestBean u2 = new TestBean(); u2.setFistname("tang"); u2.setLastname("chuan"); u = u2; } public void changeValue(TestBean u) { u.setLastname("White"); }
应用类型传递 传递的是 栈上存储 的句柄的拷贝,是没办法改变这个句柄的值,但是可以通过这个句柄 去改变句柄指向的堆上的内存的值。
总的来说一般写代码加上返回值,总是好的,总是没有问题的。
阅读全文
0 0
- Java参数传递,值传递
- Java参数传递
- Java参数传递
- java的参数传递
- java中的参数传递
- java中的参数传递
- JAVA的参数传递
- Java参数传递方式
- java参数传递
- Java-参数的传递
- java方法参数传递
- Java中的参数传递
- Java 参数传递机制
- java参数传递
- Java参数传递(推荐)
- java中的参数传递
- java参数传递
- Java的参数传递
- 微信支付接口
- stm32启动文件分析
- Win10连接远程桌面的时候提示您的凭证不工作
- java Nio 总结学习
- IHitTest接口
- java参数传递
- php-fpm 重启 http://www.cnblogs.com/GaZeon/p/5421906.html
- IOS开发之格式化日期时间
- Linux命令
- BZOJ1601 灌水(USACO08 Oct)
- Linux多线程实践(三)线程的基本属性设置API
- Java 类加载顺序与成员变量初始化
- ssm框架使用详解&配置两个数据源
- 201412-2Z字形扫描