java方法调用都是值传递的理解
来源:互联网 发布:程序员能自学吗 编辑:程序博客网 时间:2024/05/01 06:41
java中对象在调用方法的时候都是值传递,不存在引用传递,先上个例子说明下问题
下面是ParaPassTest.java文件内容:
package com.mzbonnt.basicdatatype;/** * java 参数传递测试,java中只有值传递,没有引用传递 * @author hp * */public class ParaPassTest {private int para;/** * @return the para */public int getPara() {return para;}/** * @param para the para to set */public void setPara(int para) {this.para = para;}}下面是ParaPassDemo.java文件内容:
package com.mzbonnt.basicdatatype;public class ParaPassDemo {private static void paraPassByValue(ParaPassTest pt1, ParaPassTest pt2){pt1 = pt2;System.out.println("pt1->para:" + pt1.getPara() + "------pt2->para:" + pt2.getPara());}/** * @param args */public static void main(String[] args) {ParaPassTest ppt1 = new ParaPassTest();ppt1.setPara(30);ParaPassTest ppt2 = new ParaPassTest();ppt2.setPara(60);paraPassByValue(ppt1, ppt2);System.out.println("ppt1->para:" + ppt1.getPara() + "------ppt2->para:" + ppt2.getPara());}}下面是程序执行结果:
pt1->para:60------pt2->para:60
ppt1->para:30------ppt2->para:60
如果java存在引用传递的话,ppt1和ppt2的para值应该相等,而程序最后结果显示却不相等,说明java调用方法时参数都是值传递。
分析:程序执行paraPassByValue(pt1, pt2)的时候,是把ppt1对象和ppt2对象的地址值传递过去了,分别赋给pt1和pt2,是一个值传递,pt1 = pt2只是把pt2的值赋给pt1,此时pt1和pt2的值都是ppt2对象的地址值,因此在paraPassByValue方法中打印结果的时候输出的值都是一样的(都是ppt2对象的para值),paraPassByValue方法执行结束后,在main方法中再一次打印的时候,是打印ppt1对象和ppt2对象的para值,而这两个对象的para值从未改变过,因此还是保持原来的结果没有发生变化。
再看下面一个例子,修改ParaPassDemo.java,下面是修改后的文件内容:
package com.mzbonnt.basicdatatype;public class ParaPassDemo {private static void paraPassByValue(ParaPassTest pt1, ParaPassTest pt2){pt1 = pt2;pt2.setPara(pt2.getPara() + 100);System.out.println("pt1->para:" + pt1.getPara() + "------pt2->para:" + pt2.getPara());}/** * @param args */public static void main(String[] args) {ParaPassTest ppt1 = new ParaPassTest();ppt1.setPara(30);ParaPassTest ppt2 = new ParaPassTest();ppt2.setPara(60);paraPassByValue(ppt1, ppt2);System.out.println("ppt1->para:" + ppt1.getPara() + "------ppt2->para:" + ppt2.getPara());}}下面是程序执行结果:
pt1->para:160------pt2->para:160
ppt1->para:30------ppt2->para:160
分析:程序执行paraPassByValue(pt1, pt2)的时候,把ppt1对象和ppt2对象的地址值传递过去,pt1 = pt2执行后pt1和pt2的值都是ppt2对象的地址值,pt2.setPara(pt2.getPara() + 100)执行后,ppt2对象的para值发生了变化,由60变为160,因此在paraPassByValue方法中打印结果的时候输出的值都是160的(都是ppt2对象的para值),paraPassByValue方法执行结束后,在main方法中再一次打印的时候,是打印ppt1对象和ppt2对象的para值,ppt1对象的para值没有发生过变化,ppt2对象的para值变成160,,因此最终结果一个是30,一个是160
- java方法调用都是值传递的理解
- 理解JAVA里的所有参数传递都是值传递
- 我的理解:Java 中方法的参数全部都是按“值”传递的
- 深入理解Java方法调用的参数传递
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- Java方法调用的值传递方式
- java所有类型的参数传递都是“值传递”
- Java方法参数- 值调用的理解
- java都是值传递 测试
- 深入理解java方法调用与参数传递
- java方法传递参数传递的到底是什么?值调用:引用调用
- 对Java方法参数按值传递的理解
- 对Java方法参数按值传递的理解
- java值传递的理解
- java中的传递参数其实都是值传递(引用就是拷贝对象的一个地址)
- 深入理解Java的方法调用
- 方法调用语句, 值传递与引用传递的区别
- 在Java里面参数传递都是按值传递
- 制作splash-安卓开发(1)
- intellij 新建javaweb项目并用tomcat 7启动
- 为阿里云ECS服务器二级域名绑定tomcat子目录,实现一个IP多个二级域名
- BestCoder Round #75 T3 King's Order HDOJ 5642
- 重学数据结构系列之——队列
- java方法调用都是值传递的理解
- 帮助文档打开后右边显示为空
- iOS基础之沙盒机制-路径获取
- 深刻理解Python中的元类(metaclass)
- 自然数幂和模板
- 数组和逗号表达式
- 字符指针的初始化以及程序分析实例
- 【案列】私人通讯录01
- 简单脱壳教程笔记(3)---手脱UPX壳(2)