Java内存
2015-11-16 13:17
288 查看
栈:
- 栈空间存储的是局部变量的基本数据类型的值。
- 需要声明,并初始化后才能使用。
- 栈中的数据在变量所在的代码块执行完毕,变量结束生命周期,栈中的数据立即被清理。
堆:
堆内存空间存储的是通过NEW关键字实例化的引用数据类型。
一旦实例化之后,系统赋予默认值。
当栈中的变量及引用被清理后,堆中的空间不会立即清理,此时堆中的空间就变为垃圾,由JVM中的“垃圾回收器”不定期检查清理。
说明:
局部变量的基本数据存储在栈中,通过NEW实例化的引用数据类型存放在堆中,栈中会存放实例化对象的位置
int a = 0;//直接存放在栈中
int[] arr = new ing[3];//在堆中存放数据 将其在堆中的位置传递给栈中的对象
arr = 0x7764;//栈中存放
按引用传递:
package world; /** * 按值传递 按地址传递 * @author lenovo * */ public class GArrayDemo { public static void main(String[] args){ int [] arr4 = new int[4]; arr4[0] = 10; arr4[1] = 20; arr4[2] = 30; arr4[3] = 40; for(int i = 0; i < arr4.length;i++){ System.out.println("arr4["+i+"] ="+arr4[i]); } System.out.println("直接打印arr4:"+arr4);//直接打印arr:[I@21c55e69 //将引用类型清空 arr4 = null;//将地址清空 System.out.println("将arr4置为null后,再次打印arr4:"+arr4);//将arr置为null后再次打印arr:null // System.out.println("将arr4置为null后,访问arr4的length属性:"+arr4.length);//空指针异常Exception in thread "main" java.lang.NullPointerException at world.GArrayDemo.main(GArrayDemo.java:23) arr4 = new int[5]; arr4[0] = 80; int[] arr5 = arr4;//仅仅是将arr4的地址复制给了arr5,表示arr4和arr5使用的是相同的地址,指向了同一堆空间 arr5[0] = 100; System.out.println("arr5[0]="+arr5[0]);//arr5[0]=100 System.out.println("arr4[0]="+arr4[0]);//arr4[0]=100 arr4 = null;//堆空间是否是垃圾?为什么? 不是,因为arr5还指向这个堆空间 System.out.println("将arr4置为null后,访问arr5的length属性:"+arr5.length);//5 System.out.println("将arr4置为null后,访问arr4:"+arr4);//null arr4 = arr5; change(arr4); System.out.println(arr4[0]);//1000 } /* * 将arr4的地址复制给方法体,方法体中arr将堆空间相应地址下的数据更改,执行完毕后方法体数据删除 */ public static void change(int[] arr){ arr[0] = 1000; } }
按值传递
按值传递是将值复制一份传递到方法体,方法体执行完毕后栈空间内对应的数据自动删除,原值不改变
package world; public class GArrayDemo { public static void main(String[] args){ int x = 10; change(x); System.out.println(x);//10 } public static void change(int a){ a = 1000; } }
package world; public class GArrayDemo { public static void main(String[] args){ int i = 7; i = change2(i);//方法体中有数值传回,并给i赋值,若不用i接收,则i数值不变 System.out.println(i);//20 } public static int change2(int a){ a = 20; return a; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统