大家好,今天小编关注到一个比较有意思的话题,就是关于java语言堆栈的问题,于是小编就整理了2个相关介绍Java语言堆栈的解答,让我们一起看看吧。
什么是空堆栈?
堆栈 堆栈又称为栈,也是线性数据结构,并且是遵循“后进先出”(LIFO)原则的重要线性数据结构。在Java中,Stack是java.util包中专门用来实现栈的工具类。 栈只能在一端输入输出,它由一个固定的栈底和一个浮动的栈顶。栈顶可以理解未是一个永远指向栈最上面元素的指针。向栈中输入数据的操作称为“压栈”,被压入的数据保存在栈顶,并同时使栈顶指针向上浮一格。从栈中输出数据的操作称为“弹栈”,被弹出的总是栈顶指针指向的位于栈顶的元素。如果栈顶指针指向了栈底,则说明当前的堆栈是空的。 Stack是Java用来实现栈的工具类,它的主要方法如下:
1、构造函数 public Stack():是栈类唯一的构造函数,创建堆栈可以直接调用它。
2、压栈与弹栈操作 public Object push(Object item):将指定对象压入栈中。 public Object pop():将堆栈最上面的元素从栈中取出,并返回这个对象。
3、检查栈是否为空 public Boolean empty():若堆栈中没有对象元素,则此方法返回true,否则返回false。 实现了堆栈这一数据结构的类叫堆栈类
String存放在堆中还是栈中?
堆和栈是Java程序在运行过程中的数据存储区,栈是stack,堆是heap。
堆主要用来存储使用new关键字创建的Java对象和数据,堆中存储的对象和数据都有相应的内存地址值。当堆中存储的对象和数据不再被使用时,Java的JVM会启动垃圾回收机制,自动清除堆中存储的对象和数据。
栈是用来存储临时数据的,如Java对象的引用,函数内部的数据和临时对象,函数执行完毕后,存储在栈中的临时数据会立即被释放。
问题中的String指的应该是java中的String吧。这里给出的回答针对java。
String是一个不可变的对象,在java中只能作为常量使用。java代码中所有的显式字符串,即直接写出的那种字符串,例如"abc"都是String对象。String本身作为一个对象,必然是在堆上的,而String中的内容char[] value 则是放在堆中的一个特殊区域中——常量区。
所以String本身是放在堆上,而根据垃圾回收情况,又可以分为新生代和老年代。如果这个String对象刚创建不久,则它一般位于堆的新生代,如果它创建之后存在了很长时间,则它很可能处于堆中的老年代。注意,String中的字符串内容即字符数组value则位于堆中的常量区。
如果你先有一个字符数组,例如char[] arr { 'a', 'b', 'c' },然后调用String s = new String(arr);创建的String,则字符数组不再是位于常量区,而是跟其他对象一样,位于堆上。注意,即使这个arr数组是在栈上分配的,这样创建的String中的value依然是在堆上。如果你想把这个字符串放进常量区,可以调用String.intern。
栈上不会有对象,只会有基本变量和引用变量,所以String只可能位于堆上,不可能位于栈上。
到此,以上就是小编对于java语言堆栈的问题就介绍到这了,希望介绍关于java语言堆栈的2点解答对大家有用。