博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java方法 传值方式
阅读量:6989 次
发布时间:2019-06-27

本文共 1019 字,大约阅读时间需要 3 分钟。

这个问题是面试的时候经常会问到的一道题吧?这次做项目的过程中,其中一个同学因为无用了,导致了一个bug,不过是在提测前啦!本来我想借着这次机会分享一下java方法传参的机制,但是经过几天的学习,了解,发现网上的博客基本上没有一篇能让人看后就清清楚楚的明白的,讲的都很囫囵吞枣。觉得要要真正把这个问题说明白还真的不是一件容易的事?要了解jvm的堆栈和堆,以及java中的引用和赋值的含义。我现在也不能清楚的讲明白,但现在应该不会误用了,就是方法调用,知道怎样做可以改变传递参数的值,怎样做是不会改变传递参数的值。下面来个小测试程序,你知道这个程序会答应出什么吗?

public class Test {    public static void main(String[] args) {        StringBuffer a = new StringBuffer("A");        StringBuffer b = new StringBuffer("B");        int i = 5;        operate(a, b, i);        System.out.println(a + "," + b + "," + i);    }    public static void operate(StringBuffer x, StringBuffer y, int j) {        x.append(y);        y = x;        y.append("C");        j = 1;    }}

 

规律总结:
Java参数,不管是原始类型还是引用类型,传递的都是副本
    如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.
    如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是通过地址改变改变了地址指向的值,那么在函数内的改变会影响到传入的参数。
    如果在函数中改变了副本的地址,如当执行如a=其他对象,a=new等赋值操作时,实际上是将a指向新的位置,那么函数外的原值不改变。

转载于:https://www.cnblogs.com/wangfeixiong/p/7158442.html

你可能感兴趣的文章
java调用python的几种用法(看这篇就够了)
查看>>
20180307-Xen、KVM、VMware、hyper-v等虚拟化技术的比较
查看>>
一个简单的 vue.js 实践教程
查看>>
【批处理】创建快捷方式
查看>>
Android学习笔记(一) 使用选择部件
查看>>
daily scrum: 2012/11/3
查看>>
eclipse导入maven时pom.xml提示miss相关xxx.jar(本地仓库存在相关jar)报错问题
查看>>
日期格式化(类似QQ邮箱中的邮件列表显示日期)
查看>>
java版spring cloud+spring boot+redis社交电子商务平台(八)消息总线(Spring Cloud Bus)
查看>>
2018-2019-2 网络对抗技术 20165303 Exp6 信息搜集与漏洞扫描
查看>>
MySQL 性能优化神器 Explain
查看>>
C#之将DLL组件添加到工具箱选项中...
查看>>
关于为什么会有偏移一说,粗略解释一下...
查看>>
[背包]JZOJ 3232 【佛山市选2013】排列
查看>>
c#之函数
查看>>
利用Python的xlrd和xlwt功能,开发小程序用于实现硬件GPIO译码 工作日志
查看>>
php -- php的事务处理
查看>>
WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(一)
查看>>
目标-动作机制
查看>>
PullToRefresh开源控件和5.0新特性SwipeRefreshLayout的对比使用
查看>>