这道看似简单的jave面试题,80%的人都会错

张兵游勇 2019-07-12 11:25:46
int a = 0; for (int i = 0; i < 99; i++) { a = a ++; } System.out.println(a);
...全文
785 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
那么 怎么把a++的值打印出来啊???求解!
west_jing 2019-10-18
  • 打赏
  • 举报
回复
又是一个陷阱题666666
螃蟹变异了 2019-10-18
  • 打赏
  • 举报
回复
代码
int a = 0;
a = a++;
对应的字节码如下:
0: iconst_0
1: istore_1
2: iload_1
3: iinc 1, 1
6: istore_1
7: return
字节码分析:
编号0的字节码:常量0入栈(栈顶数值目前为0)
编号1的字节码:把栈顶的0出栈,并且保存在局部变量表为1的位置(也就是变量a)
编号2的字节码:把局部变量表为1的位置的数值加载到栈顶(栈顶数值目前为0)
编号3的字节码:把局部变量表为1的位置自增1,那么目前局部变量表1位置的存储的值为1
编号6的字节码:把栈顶的数值出栈(现在栈顶的数值为0)存入到局部变量表为1的位置.所以最后局部变量表为1的位置的数值为0,也就是a的值为0
FreeEagle_Kaze 2019-10-18
  • 打赏
  • 举报
回复
引用 20 楼 Super杀码龙的回复:
a++是先执行后加 ++a是先加后执行 这有什么有争议的?
看着这一步想了半天...才想起来a++应该是先赋值后运算...a始终等于0
编程写手 2019-08-11
  • 打赏
  • 举报
回复
不就是0吗,这还难?
ℳ初阳ﻬ 2019-08-03
  • 打赏
  • 举报
回复
我觉得本题的考察点是a++这个知识点 此题中a=a++,a先进行赋值,再自增, 因为a的初始值为0,所以在第一轮中,a=0,然后a自增为1,但此时的1并未给谁赋值,在进行第二轮的时候,a承接的还是上一轮的a=0; 所以,经过99次循环,a的值始终为0
softFE 2019-07-31
  • 打赏
  • 举报
回复
引用 23 楼 媚衣 的回复:
在内存中a=a++的运算是这样的,在a做加法运算之前,先开辟一片临时区域保存a的值,然后a再做自加运算,a做完自加运算之后,再把临时区域的值赋值给等号左边的变量即a,a=a++相当于: int b=a; a = a+1; a = b; 所以a最后的值是0
哇, 一个回答 码了三遍吗? 为什么只有这一边 看起来正常呢...
sanqian3141 2019-07-30
  • 打赏
  • 举报
回复
哈哈 一眼过去是98 。再想确实是0 以前老是讲过这个 a=a++ 和 a=++a 的区别 老师讲的是 这个过程是先在栈内存中开辟一个临时空间来存入(也可以叫 备份)a, a++ 是先将a存入临时空间(备份) 然后将a的值赋值给a,再进行++自增计算 因为a的值已经赋值给另一个a了,所以这个自增过程就没有意义了 而++a 是先自增计算在放入临时空间(备份) 再赋值给a 差不多是这个意思,我也表达不清楚
老许要老婆么 2019-07-29
  • 打赏
  • 举报
回复
我看到题目就猜到 是前++要么后++
hejava2019 2019-07-29
  • 打赏
  • 举报
回复
在电脑上写完编译之后,得出结果是0
qq_42625373 2019-07-25
  • 打赏
  • 举报
回复
引用 25 楼 weixin_45324279 的回复:
[quote=引用 3 楼 qq_42625373 的回复:] a = a ++; 还有这种写法吗......... a++本身不是相当于a = a + 1;吗.........
a=a++;他是先赋值在运算, a=++a;是先运算后赋值,[/quote] 我的意思是 他写的这个 a = a++ 相当于: a = a = a+1 和a++ 本身:a = a +1 不是一样一个意思吗 而且写出这种a = a++代码 他不会被经理打死吗................
guishuanglin 2019-07-25
  • 打赏
  • 举报
回复
主要是这个: a = a ++; 意思, 先使用 a, 然后再加1 相当于: a=a; a = a+1; 所以上题, 就是 从0 到 98 相加.
  • 打赏
  • 举报
回复
涉及a++与++a的不同,在运算中a++是先赋值再运算,int a = 0; a = a++; System.out.println("a");输出为0; 而这个 int a = 0; a = ++a; System.out.println("a");输出为1;
qq_15622315 2019-07-25
  • 打赏
  • 举报
回复
你脑子好像进蛆虫了
小白鼠呀 2019-07-25
  • 打赏
  • 举报
回复
应该是0。
PwenHao 2019-07-23
  • 打赏
  • 举报
回复
a++是先赋值再运算,所以说是先执行等号,再a+1,到头来a还是等于0
weixin_45324279 2019-07-23
  • 打赏
  • 举报
回复
引用 3 楼 qq_42625373 的回复:
a = a ++;
还有这种写法吗.........
a++本身不是相当于a = a + 1;吗.........


a=a++;他是先赋值在运算,
a=++a;是先运算后赋值,
  • 打赏
  • 举报
回复
C语言里面有i = 1; i=i++;这时候i=1。刚刚测试了一下Java,发现也是一样。
qq_39936465 2019-07-22
  • 打赏
  • 举报
回复
元语句可以理解为
a=a=a+1,只要是等式右边的都是过程量,所以a=a+1都是过程量,完成后会被销毁,但是由于
a++先赋予,所以右边的a=a+1执行完后直接被销毁,其实就等于a=a,后面的++根本没有意义。
checky_c 2019-07-22
  • 打赏
  • 举报
回复
将程序改成如下等效程序就好理解了:
int a = 0;
for (int i = 0; i < 99; i++) {
int b = a++;
a = b;
}
System.out.println(a);

“a = a++”等效于“ int b = a++; a=b;”这段程序。

每次循环的时候,等效程序逻辑执行顺序如下:
首先 将 a 的值赋值给变量 b,这个时候因为a初始化值为0,所以 b 的值为0;
紧接着 a自身的值加 1,a的值就变成1了;
然后又将 b变量值赋值给 a 变量,导致 a 变量的值又变成0了。

所以进过99次循环后,打印出来 a 变量的值始终都是 0 。

以下学习资料的加qun:398605307 免费领取,欢迎进群交流学习
加载更多回复(21)
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一次汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧