java程序的参数传递分析
2015-10-12 20:43
447 查看
1、关于Java程序的参数传递可以分为
①传递的是基本数据类型(如:int、float、doube.....);
②传递的是引用数据类型(如:用户自定义类);
一、先分析基本数据类型,程序如下:
由结果我们可知两次的结果不一样,接下来我们根据内存来分析是why:
需要注意的是m1方法中的a和main方法中的a是完全处在两块不同的内存空间中,他们的值互不影响。所以他们的打印结果不同。
二、我们谈论关于引用类型的参数传递,代码如下:
运行结果如下:
我们接下里继续分析这是why:
stack 中的Animal对象存储的是内存地址,当main方法执行到m2(a1)处时,a1将内存地址copy给上面的a1,此时它们两个a1都指向同一块内存空间,接着m2方法执行到a1.age时,它是指向堆中的对象来说的,所以age变成11,由于两个a都指着同一块内存空间,所以对于main方法中的age来说,它的值也是11;
三、给大家补充一点关于new出来的对象何时能才能被Java的自动垃圾回收机制回收:
当new出来的对象没有更多的引用指向它时,Java的自动垃圾回收机制将会将它当成垃圾回收处理掉;如:
①传递的是基本数据类型(如:int、float、doube.....);
②传递的是引用数据类型(如:用户自定义类);
一、先分析基本数据类型,程序如下:
public class Test01{ public static void m1(int a){ a++; System.out.println("a="+a); } public static void main(String[] args){ int a=10; m1(a); System.out.println("a="+a); } }
<strong><span style="font-size:18px;">程序运行的结果如下:</span></strong>
<img alt="" src="https://img-blog.csdn.net/20151012210641343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
由结果我们可知两次的结果不一样,接下来我们根据内存来分析是why:
需要注意的是m1方法中的a和main方法中的a是完全处在两块不同的内存空间中,他们的值互不影响。所以他们的打印结果不同。
二、我们谈论关于引用类型的参数传递,代码如下:
public class Test01{ public static void m2(Animal a1){ a1.age++; System.out.println("age1="+a1.age); } public static void main(String [] args){ Animal a1=new Animal(10); m2(a1); System.out.println("age="+a1.age); } } class Animal { int age; Animal(){ } Animal(int _age){ age=_age; } }
运行结果如下:
我们接下里继续分析这是why:
stack 中的Animal对象存储的是内存地址,当main方法执行到m2(a1)处时,a1将内存地址copy给上面的a1,此时它们两个a1都指向同一块内存空间,接着m2方法执行到a1.age时,它是指向堆中的对象来说的,所以age变成11,由于两个a都指着同一块内存空间,所以对于main方法中的age来说,它的值也是11;
三、给大家补充一点关于new出来的对象何时能才能被Java的自动垃圾回收机制回收:
当new出来的对象没有更多的引用指向它时,Java的自动垃圾回收机制将会将它当成垃圾回收处理掉;如:
public class Test01{ public static void main(String[] args){ Animal a=new Animal(10); a=null; } } class Animal{ int age; Animal(){ } Animal(int _age){ age=_age; } }
相关文章推荐
- java
- 【笔试】57、确定一个字符串的所有字符是否都不同
- 浅谈java线程安全
- spring junit
- 慕课JAVA攻城狮计划---使用 Date 和 SimpleDateFormat 类表示时间
- JAVA_SE基础——43.抽象类
- Java HashMap 的实现原理详解
- 在myeclipse里支持egit
- Java中的String与常量池
- 韩顺平 java 第38讲 线程
- java操作注册表时,注意路径问题
- Javaweb中四个域对象
- 深入浅出Java垃圾回收机制
- 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
- JAVA NIO之浅谈内存映射文件原理与DirectMemory
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
- Java学习笔记--Java8 Lambda表达式
- Java集合
- Java从入门到精通10-泛型
- Java设计模式 —— 单例模式(Singleton)