Java传值分析
public class Example{
String str=new String("good");
char[] ch={'a','b','c'};
public static void main(String args[]){
TestDemo ex=new TestDemo();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
System.out.print(ex.ch);
}
private void change(String str, char[] ch) {
str="test ok";
ch[0]='g';
}
}
public class Example{ // 我来分析一下内存分配情况吧!
String str= new String("good");
//String str 时,把str引用放在栈空间,值为null , 当new String 时 ,在堆空间生成一个 good ,并且Str指向它!
char[]ch={'a','b','c'};
//char[]ch 时,把ch 引用放在栈空间,在堆空间生成一个数组 a,b,c 并且ch 指向它们
public static void main(String args[]){
Example ex=new Example();
//Example ex 时,把 ex 引用放在栈空间, 当new Example 时 ,
//在堆空间生成一个对象 并且 ex 指向它 ,没有任何属性值,因为没有写构造函数
ex.change(ex.str,ex.ch);
// 调用 方法 ,看方法分析!
System.out.print(ex.str+"and");
System.out.print(ex.ch);}
public void change(String str,char ch[]){
// 可能这里你会误会 ,这里的str 不同于 外面的 str ,
// 这里的意思是, String str 在栈空间 '新建' 一个str , 其实那里已有一个 str ,就是上面那个
// 他们两个并不一样 ,这个str 是局部变量,依赖于方法 , 只要方法结束,它就自动消亡,而外面那个还在,
// 所以这里就是 ,把外面的 str 传进来,把值赋给 这个 str ,此时两个都是 ''good''
// 而char [] 分析则不同 ,
// 请先 记住 ,ch [0],ch[1] ,ch[2] ...都是存在堆空间的 ,即是他们的地址空间,
// 对于这种引用类型的变量(例如数组,对象),他们其实是把传进来的值直接放在引用地址.
// 即 ch[0] 始终只有一 个,并且指向堆空间,参数传进来也是在堆空间里面。
str="test ok";
// 然后执行这一步时 , 这里面的str值就变化了 ,即变为 test ok , 请记住此时在栈空间是有两个 str 哦
// 外面依然是 good , 可里面的 变成 test ok , 好的 ,继续 ...
ch[0]='g';
// 据上面分析,很显然 , ch[0] 始终是一个 ,并且存放和修改都是直接在堆空间, 所以这里ch[0]变成 'g'
} // 好,这个方法终于运行结束 , 重点来了, 到这里 谁 死掉了 , 就是这里面那个 依赖于方法存在的局部变量 str
// 那么现在一共就只有一个 str ,并且它的值为 good ,当接下去控制台输出的时候调用 str ,
// 你说还会调用那个死了的 str 吗, 显然 调用 还存在的 str 即是 good
}
// 其实 , 假如想看明白,你可以这样 , 把方法里面的 str , 改为 this.str
// 你就能够区分 : 原来他们真是 两个 str ,而使用 this (本类) 调用的才是成员变量!
// 不依赖方法 , 死不了 !
Java传值分析的更多相关文章
- Java 性能分析工具 , 第 3 部分: Java Mission Control
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
- Java 性能分析工具 , 第 2 部分:Java 内置监控工具
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
- 浅谈java性能分析
浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...
- TDA - Thread Dump Analyzer (Java线程分析工具)
TDA - Thread Dump Analyzer (Java线程分析工具)http://automationqa.com/forum.php?mod=viewthread&tid=2351 ...
- JAVA 可视化分析工具 第12节
JAVA 可视化分析工具 第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...
- Java 反射 分析类和对象
Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...
- 深入理解JVM(八)——java堆分析
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...
- Java集合分析
Java集合分析 前言 从开始接触Java的时候, 就在强调的一个重要版块, 集合. 终于能够开始对它的源码进行分析, 理解, 如果不懂得背后的思想, 那么读懂代码, 也仅仅是读懂了 if else ...
- JVM学习--(八)java堆分析
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...
随机推荐
- iOS客户端与网页交互文档
很少和客户端打交道,这次由于做会活动,要和客户端配合做个分享的功能 这里总结下基本的流程,就是前端在H5 里调用客户端的方法即可 第一部分 客户端提供需求文档 网页请求设置 客户端发起请求时在HTTP ...
- RabbitMQ基础概念及使用
RabbitMQ RabbitMQ是什么? RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Message Q ...
- POJ - 3461 (kmp)
题目链接:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
- js 提示样式 ? 上写提示内容
//再需要的地方放入 <img dms_map_key="zs_prise" src="${ctx }/static/image/tip.png" cla ...
- Hive 基本语法操练(五):Hive 的 JOIN 用法
Hive 的 JOIN 用法 hive只支持等连接,外连接,左半连接.hive不支持非相等的join条件(通过其他方式实现,如left outer join),因为它很难在map/reduce中实现这 ...
- 在myecplise中更新代码发布后没效果
requestmapping指定路径不能访问: 重新发布,重新访问,清除缓存,重新访问,重启浏览器,清除缓存,重新访问,清除Tomcat相关目录,重新发布,重新访问……折腾了很久,可还是没有解决问题. ...
- SpringBoot | 第二十二章:定时任务的使用
前言 上两章节,我们简单的讲解了关于异步调用和异步请求相关知识点.这一章节,我们来讲讲开发过程也是经常会碰见的定时任务.比如每天定时清理无效数据.定时发送短信.定时发送邮件.支付系统中的定时对账等等, ...
- SpringBoot | 第一章:第一个SpringBoot应用
springboot简单介绍 概述 SpringBoot的核心功能 优缺点 优点 缺点 工程搭建 创建项目 项目结构 pom依赖 主入口 编写controller 启动应用 总结 老生常谈 sprin ...
- Android入门:Service入门介绍
一.Service介绍 Service类似于Windows中的服务,没有界面,只是在后台运行:而服务不能自己运行,而是需要调用Context.startService(Intent intent);或 ...
- Log4j知识汇总
Log4j在java开发中还是很常见的,而在日志系统里面也占有举足轻重的地位,想要做好日志相关的工作,了解log4j还是很必要的. 下面就针对 log4j的官方文档user-guide 进行翻译与整理 ...