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

publicclassfortest{publicstaticvoidmain(String[]args){intj=0;for(inti=0;i<10;i++){j=j... public class fortest {

public static void main(String[] args) {

int j=0;
for(int i=0;i<10;i++)
{
j=j;
j=j+1;
}
System.out.println(j);
}

}
运行结果是10,但是如果把循环体的里的代码换成j=j++,结果就是0,我的疑问是
j=j++为什么不等于j=j;j=j+1呢?等号优先级大于自增自减,复制后要自增,但是为什么没有改变?
展开
 我来答
特过N
2011-09-10 · 超过11用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:23.1万
展开全部
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了。
mumumomo731
2011-09-10 · TA获得超过706个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:279万
展开全部
本质原因是因为c默认是按值传递,java是按引用传递。
j=j++
在java中分解一下就是
temp=j;
j=j+1;
j=temp;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8b1fb7c
2011-09-10 · TA获得超过192个赞
知道答主
回答量:161
采纳率:0%
帮助的人:99万
展开全部
是这样的,
j=j++,先进行的是j++,然后先把j原先的值(还是0)赋值给j,因为j++的意思就是 先用j的值,然后再进行加1。
你要是理解不了 可以试试j=++j,因为++j是先进行加1,再使用j的值
更多追问追答
追问
嗯,这个基本知识我懂,我的问题你看下2楼
追答
你确定你得那个c些的代码返回值10吗

http://wenku.baidu.com/view/8b900009bb68a98271fefa75.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzihdm
2011-09-10 · TA获得超过101个赞
知道答主
回答量:90
采纳率:0%
帮助的人:58.5万
展开全部
看到没人回答 告诉你我的理解 你看满意不 我也在自学 可以多联系交流
1,fr.close(); 不写一般也没事,但是为了不造成资源的浪费,都是要写的,打开了不用就要关。免得占用资源,影响程序
FileNotFoundException,顾名思义,当然是找不到指定文件的时候报错了。
IOException呢,就是输入输出流在程序执行期间被一些因素中断时久要报错了。
2,this关键字,this.就是对该对象自身调用其属性或方法。有时用来区别成员变量与形参同名的情况:classA{int i;...public void f(int i) {this.i = i;}},如果你用eclipse多了就会发现this经常用,this.的好处就是eclipse会自动生成该对象可调用的方法供你选择,繁多的方法名你就不用记~\(≥▽≤)/~啦啦啦,有个模糊印象就ok了。
你那个匿名类又没有setTitle()方法,加this调用肯定报错。
3,凡是AAA$BBB*.calss命名的都是内部类,BBB类的定义在AAA的类体中。你写的computer类 中肯定定义了这么些个内部类。
4,这个方法抛的IOException,你可以认为系统在以此文件所在位置构建抽象路径的时候出错了,至于什么错,就管了,也管不着,没必要那么较真。
追问
百度知道的bug真多啊

参考资料: 百度一下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
p496020879
2011-09-10
知道答主
回答量:13
采纳率:0%
帮助的人:12.3万
展开全部
j=j++; 运算过程是
第一步:先算j=j计算结果是0;
第二步:算0++,所以结果还是0;
总而言之:j=j++;算的就是0++;所以结果还是0,没有给j赋上值
追问
.。。。你的第二步说的不对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式