数据存储和读取特征区别
堆,队列优先,先进先出(FIFO—firstinfirstout)
栈灯,先进后出(FILO—First-In/Last-Out)。
堆和栈的区别与编程语言无关,硬件自身不同的数据存储方式有关。不同语言存储在堆和栈的数据类型也不一定相同。
弦节刚长入组种据进刚1.栈(stack)360问答与堆(heap)敌都是Java用来在Ram中存台船领修著谁相去合放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
2.栈的优势是,存取速祖随律收移以谁距担弱简度比堆要快,仅次于读她吃修困王余地终层直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个段气栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再班植哥临井行过干第使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
3.Java中的数据类型有两种。
一种是基本类型(primitivetypes),共有8种,即int,short,long,byte,float,double,boolean,char(注意,并没有string的基本类型)。这种类型的定义是通过诸如inta=3;longb=255L;的形式来守构曾达定义的,称为自动变量。值得注意的是,自动变量存的是字面值,不是类的实例,即不是类的止教照随操单宁政理领引用,这里并没有类的存在段众以住劳。如inta=3;这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的数据,由于大小可知,生存期可知(这些字面值固定定义在某个程序块里面,程序块退出后,字段值就消失了),出于追求速度的原因,就存在于栈中。