对象在内存中的存储机制
2010-05-16 15:04
183 查看
数据类型和对象在内存中的处理方法是有差别的。拿数组举例
数组建立时候会在内存中分别存放到两个地方
数组的元素会被放在堆(heap)中,数组引用变量存储在栈(stack)中.
下面的程序输出可以说明这个问题,数组变量只是引用地址.
现在我明白2000年写代码的时候把HashTable放到数组中,为什么改变的时候不是我想的样子了.
下面的代码非常简单,但是我把他变成面试题,真正写对的人数少的让人惊讶(面试大约50人左右只有2个人答对了).
run-main:
3:4
----------a---------
3
4
5
----------b---------
0
0
0
0
-------------------
----------a---------
3
4
5
----------b---------
3
4
5
-------------------
----------a---------
3
99
5
----------b---------
3
99
5
成功生成(总时间:4 秒)
数组建立时候会在内存中分别存放到两个地方
数组的元素会被放在堆(heap)中,数组引用变量存储在栈(stack)中.
下面的程序输出可以说明这个问题,数组变量只是引用地址.
现在我明白2000年写代码的时候把HashTable放到数组中,为什么改变的时候不是我想的样子了.
下面的代码非常简单,但是我把他变成面试题,真正写对的人数少的让人惊讶(面试大约50人左右只有2个人答对了).
public class ArrayInRam { public static void main(String[] args) { int[] a = {3,4,5}; int[] b = new int[4]; System.out.println(a.length+":"+b.length); System.out.println("----------a---------"); for(int i:a){ System.out.println(i); } System.out.println("----------b---------"); for(int j:b){ System.out.println(j); } System.out.println("-------------------"); b=a; System.out.println("----------a---------"); for(int i:a){ System.out.println(i); } System.out.println("----------b---------"); for(int j:b){ System.out.println(j); } System.out.println("-------------------"); a[1]= 99; System.out.println("----------a---------"); for(int i:a){ System.out.println(i); } System.out.println("----------b---------"); for(int j:b){ System.out.println(j); } } }
run-main:
3:4
----------a---------
3
4
5
----------b---------
0
0
0
0
-------------------
----------a---------
3
4
5
----------b---------
3
4
5
-------------------
----------a---------
3
99
5
----------b---------
3
99
5
成功生成(总时间:4 秒)
相关文章推荐
- 关于Class对象、类加载机制、虚拟机运行时内存布局的全面解析和推测
- 汇编机器码分析,同一对象不同字节在内存中的存储位置(大小端讨论)
- C语言内存、存储机制、计算机内存分配机制
- 研究垃圾回收机制,计算对象创建占用的内存
- 内存管理机制-内存模型与对象的访问
- Java内存区域分配、存储、垃圾回收策略与回收机制(深入JVM虚拟机)
- memcached源码剖析系列之内存存储机制(三)
- 类的实例对象在内存中存储分为哪三块区域?
- Java对象在内存中的存储
- JVM 内存分配模型概念和java中各种对象的存储
- OC基础-类对象在内存中的存储方式13
- Java 对象创建的过程和内存的运行机制
- java程序中java对象存储和内存分配的原理?
- Memcached源码剖析系列之内存存储机制(一)
- OC 对象的内存存储细节(类方法及对象方法的调用细节)
- 对象在内存中是如何存储的(内存五大区域和类加载)
- The NOTE of learning ASP.NET [19] 关于GC(内存回收机制)、对象的销毁和using的使用
- 深入理解计算机系统-之-内存寻址(一)--存储管理机制(虚拟地址,线性地址,物理地址)
- 使用计算总内存大小的方法确定jvm中为对象分配的存储空间大小
- 我对于调用对象和基本变量类型内存的运行机制理解