Java如何实现出栈入栈并获取栈中最小值的程序

Java如何实现出栈入栈并获取栈中最小值的程序,第1张

你得明白栈的定义。代码执行的时候是执行一个方法,执行完,返回方法的上一个代码块继续往下执行后面的内容。这样的话是不是就是一个栈结构了?先进后出。方法一边执行,一边往栈里面存数据,等执行完了就取出数据(取出的是返回值,是最后一个存进去的 栈结构是后进先出),然后执行外面的代码。这么说你可能不明白,我给你举个例子。

int sub(int a,int b){

return a+b;

}

int c = sub(2,3);//注意执行这条语句的时候是不是执行了一个方法?

//那么语句执行的时候是要从左往右执行的对吧,但是事实的逻辑却是先算出来sub(2,3)这个方

//法的返回值,然后再把返回值(5)赋值给 c ,那么这个怎么实现,肯定是一个栈的数据结构,编译的时候先把”int c = “入栈,然后再把 sub(2,3),入栈,执行的时候,从栈里面取,取的第一个肯定是sub(2,3)吧?于是就计算出等于5,继续取,取出了int c =,然后就和5对接上了,就把值赋给c了。这只是一个小例子。

道理是这样,但是具体的存取可不是这样的哦。具体的存取应该分的非常细腻,应该是按照java语法的最小单位来往栈里存取的。说白了一句话,程序运行的时候的先后顺序是跟人大脑想问题的顺序一样的,但是代码不是按照这样的顺序写的(从左到右),于是就用栈结构来达到这样的效果。

这么说,明白了吗?

 java中不建议直接获取字符串内存地址,因为java不像c语言,获取内存地址是C语言的强项,java的弱项。但是java内存地址还是有一个应用场景,就是判断两个字符串内存地址是否相等来判断是否是同一个对象,用双等号“==”来比较的。参考代码如下:

public class Test01 {

/

@param args

/

public static void main(String[] args) {

// TODO Auto-generated method stub

String str1="abc";

String str2=new String("abc");

Systemoutprintln(str1 == str2);//输出false

}

}

栈里主要存的是一些,基本变量如(int,double)和一些对象的引用,

比如 List list = new ArrayList() 这里面的list就是存在栈中的,

而堆里只是存放一些new 出来的具体实例,比如上面的new ArrayList()。

也可以说对于栈的 *** 作实际上就 *** 作了堆。

比如 List listCopy = list实际上就是把list的引用地址在栈里赋给了listCopy

所以用java编程时不用考虑直接对堆进行 *** 作,而jdk也没有提供这样的方法

菜鸟拙见:

object中有tostring()方法,如果是对象,你可以直接调用tostring(),返回的是包含以@开头的内存地址的字符串,如果是基本数据类型,见用包装器包装成对象,然后用super来调用object中的tostring()方法。

不知道是否是这样,你可以试试

JAVA内存里面有一般有四个分类,堆, 栈(堆栈), 静态域, 常量池

栈: 实际上是一个队列, 遵循 FILO的原则(后进先出), 里面储存的是函数的参数值,局部变量,对象的引用(对象本身不在这里)等,因此在每调用一个函数时,堆栈都会分配一部分空间给它,函数返回时,被释放

堆: 储存静态变量,全局变量 和 用new创建的东西,栈中的内存是动态内存,其中的内存在不使用时随时可以被回收

静态域:存放对象中static定义的成员

常量池:存放常量

根据以上解释回答你的问题:

JAVA栈存的是函数的参数值,局部变量,对象的引用

方法调用栈 没有这说法吧, 方法的调用是存在栈中的

本地方法栈, 和JAVA中的栈一个作用, 只是这个栈是属于本地的,不属于JAVA虚拟机,但受JAVA虚拟机的控制,因为是JAVA虚拟机简单地动态链接并直接调用指定的本地方法。可以把这看作是虚拟机利用本地方法来动态扩展自己

局部变量和对象引用存在 栈 中, 方法调用的栈帧也是在 栈 中

以上是我自己查资料+自己的理解,有错望指出

获取内存地址?这个不太现实的。

对于Java程序员来说,并不必显示地对内存进行管理,一切都是交给Java虚拟机去做的,而且,你也不一定做得比Java虚拟机来得专业。

在你没有运行java程序之前,没有内存一说,只有运行以后,程序会被java虚拟机给编译,运行,在编译运行的过程中,程序员自定义的变量、类、方法、接口等等都会被放到不同的内存区域中,这时你只能通过调试获取变量的值(此时的值是被放在内存中的)。在调试过程中,看见一个类或者方法有很长的一串字符,那就是内存地址,因为它不能像变量一样,看见具体的值。

所以,你获取不到内存地址的

希望我能帮到你

以上就是关于Java如何实现出栈入栈并获取栈中最小值的程序全部的内容,包括:Java如何实现出栈入栈并获取栈中最小值的程序、java 如何获取对象内存地址、JAVA堆和栈等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9715361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存