永发信息网

java求助,关于j=j++的疑惑

答案:6  悬赏:40  手机版
解决时间 2021-04-05 07:02
  • 提问者网友:战皆罪
  • 2021-04-04 12:03
java求助,关于j=j++的疑惑
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-04-04 12:23
csdn上的解释:首先刚开始J = 0 , 在J = J++的时候, 等号前面的那个J已经不是J声名时的那块内存区了,JVM为他重新为他分配一块新的内存区.比如说,int j = 0 时,j的内存地址为00xx01,值为0。那么经过第一循环的以后前面那个J内存地址为00xx02,值为0,而后面那个J(内存地址00xx01)则会进行++操作,此时他的值为1,不过他已经不能影响到前面J的值了,此时J的内存地址就已经是等号前面的那个J的内存地址了(00xx02),再进行第二循环的时候,j的内存地址是:00xx02,值是0,至于00xx01那块内存区域,因为已经没有人再使用,所以将会在下一次垃圾回收的时候被GC回收,此时他(内存地址为00xx02的J)变成后面的那个j,前面那个J 则又会重新分得一块新的内存区域00xx03,值仍然是0,而00xx02则又会被丢弃然后被GC回收,依此类推,直至最后打印时J仍然为0,但他的内存地址已经不是最开初的00xx01了,换句话说,他已经不是当初的那个J了。
全部回答
  • 1楼网友:逃夭
  • 2021-04-04 16:51
for循环里的这条语句是没有用的:j=j。
你的j=0;j++又等于0加一万遍还是等于0,
怎么会有j+1的效果呢????????
要多加努力咯!!!!!!追问#include
int main(void)
{
int j=0;
for(int i=0;i<10;i++)
{
j=j++;
}
printf("%d",j);
}
我很努力哦,你看C语言执行怎么就是10呢?
  • 2楼网友:轻熟杀无赦
  • 2021-04-04 14:25
本质原因是因为c默认是按值传递,java是按引用传递。
j=j++
在java中分解一下就是
temp=j;
j=j+1;
j=temp;
  • 3楼网友:举杯邀酒敬孤独
  • 2021-04-04 13:15
j=j++
先执行: j=j ;
然后是: j++ ;
如此 。
  • 4楼网友:胯下狙击手
  • 2021-04-04 12:41
j=j++; 运算过程是
第一步:先算j=j计算结果是0;
第二步:算0++,所以结果还是0;
总而言之:j=j++;算的就是0++;所以结果还是0,没有给j赋上值追问.。。。你的第二步说的不对
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯