博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
方法中传参的问题
阅读量:4313 次
发布时间:2019-06-06

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

最近项目中出现了一个因为传参导致的一个Bug,为了防止以后再次出现这种问题。写了一个测试类。

 

public class Transfer {		public static void main(String[] args) {				int i = 1 ;				autoAdd(i);				System.out.println("最终的i值" + i);   // 通过测试可知此时的i值并没有传递 ----因为变量存在与栈中。				String a = "a";		appendStr(a);		System.out.println("最终的字符串" + a);  		a.contains("a");						Student stu = new Student();		stu.setName("张三");		System.out.println("开始时" + stu.toString());				changeStu(stu);		System.out.println("最终" + stu.toString());  // 说明修改的是堆中的信息	}			/**	 * 自加1	 * @param i	 */	public static void autoAdd(int i){		i++;		System.out.println("方法中的i值" + i);	}			/**	 * 对字符串进行处理	 * @param a	 * @return	 */	public static String appendStr(String a){		String str = a + "b";		System.out.println("方法中的字符串" + str);		return str;	}		/**	 * 改变方法中的学生信息	 * @param stu	 * @return	 */	public static Student changeStu(Student stu){		stu.setName("lisi");		System.out.println("方法中" + stu.toString());		return stu;	}	}

  

主要是考虑程序的执行流程,方法和方法中的常量引用都是存放在栈中的,首先加载的是main方法,然后将常量的引用1加入栈中。如果此时调用一个新的方法,就会将新的方法压入栈中,随后将方法中的常量2引用压入栈中(常量引用1和常量引用2并不相同,引用的指向也不相同),所以不会传递。   而对于堆中的数据来说,改变的是相同的一块空间,所以是地址传递。

 

转载于:https://www.cnblogs.com/wepfighting/p/7761378.html

你可能感兴趣的文章
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>