写在前面:前些天看完了JVM的内存结构,自以为自己是懂了,心里想想不就是分线程共享和线程私有嘛,然后又怎么怎么分怎么怎么的嘛… 直到遇到了这道题目。说句实话,曾经自己做这种运算题目,完全是靠脑子空想,然后拿上笔颤抖的写下一个自己都不知道正不正确的答案。不过过了今天,我终于能确定它的答案了。 为此,我也专门写一篇博客,记录我的学习!!! 你能肯定并且准确的说出你的答案吗? 在做这道题时我们的脑中要有对应的JVM内存结构。其中一个方法对应一个栈帧 此题目我们只需要用到栈帧里面的局部变量表和操作数栈 int i = 1 只是一个简单的赋值操作 i = i++ 结果:i还是等于1 int j = i++ 结果:i在局部变量表中变成了2,操作数栈中的 i 值为1,并且将 i 的值返回给 j,即此条语句以后,i = 2,j = 1 int k = i + ++i * i++ 结果:局部变量表中的i = 4,k = 11 按理说根据上面的分析过程,再来分析 i = ++i,就很简单了。 注意:除了i++问题。在此赠送一套最新Java架构项目实战教程+大厂面试题库,想学的 点击此处 免费获取,小白勿进哦 最后的最后:当我和室友讨论一番之后,发现C语言的计算机制和Java的有些许出入,所以本文的思考过程和计算推导仅针对Java语言
1、题目
package pers.mobian.questions01; public class test01 { public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i="+i); System.out.println("j="+j); System.out.println("k="+k); } }
2、分析
2.1、第一步
2.2、第二步
2.3、第三步
2.4、第四步
2.5、结果
3、i = ++i
我们的 i 变量先在局部变量表中进行自增,然后再将 i 进栈,然后再把栈中的数据返回给我们的变量 i 。public class test02 { public static void main(String[] args) { int i = 1; i = ++i; System.out.println(i); // 结果:i = 2 } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算