黑马程序员技术交流社区

标题: 想不明白的一段代码 [打印本页]

作者: 赵侃    时间: 2011-8-9 03:04
标题: 想不明白的一段代码
[code=java]public class Part {
    public static void main(String[] args) {
        int j = 0;
        for (int i = 0; i < 100; i++) {
            j = j++;
        }
        System.out.println(j);
    }
}[/code]输出为0。。。。实在想不透了,求解
作者: 张海刚    时间: 2011-8-9 07:14
public static void main(String[] args) {
                // TODO Auto-generated method stub
                int j =0;
                for(int i=0;i<100;i++){
                        System.out.println(j++);
                        j= j++;
                        System.out.println(j);
                }
                System.out.println(j);
        }
这个输出结果为100,正常 ,上面那个真没搞懂
[ 本帖最后由 张海刚 于 2011-08-09  07:17 编辑 ]
作者: 匿名    时间: 2011-8-9 07:33
标题: 算数运算符
这道题涉及到算术运算符 :
j=j++; 先赋值在自增,j=j--;先赋值在自减,
j=++j; 先自增在复制,j=--j;先自减在赋值。
所以将 j=j++;改为 j=++j(或j=j+1) 输出结果即为100.
作者: 匿名    时间: 2011-8-9 08:08
j=j++运算解析:
++运算符比=运算符优先级别高,但++后置表示将自身的优先级降到最低,所以上式等同于(j=j)++,你可能要说那这样逻辑关系也不应该是0呀?错!java里根本不同意像(j=j)++这样的运算结构,这样写会报错的,但j=j++却不报错;(maybe a bug);楼上的代码结果为100是因为println(j++)的原故
作者: 匿名    时间: 2011-8-9 11:23
松朝的解释实在很。。。。(省略2个字)
[code=java]public class Part {
    public static void main(String[] args) {
        int j = 0;
        int k = 0;
        for (int i = 0; i < 100; i++) {
            k = j++;
        }
        System.out.println(k);
    }
}[/code]
运行这段代码看看就知道了,其实实际开发中j++写在=号后面或者+号后面的情况经常有,当然单独提出来写,看起来更清晰
作者: 匿名    时间: 2011-8-9 14:38
标题: 回复 报纸 的帖子
俺觉得俺说的挺好的呀…怎么会这样尼?
好吧,确实没考虑周全,特此声明:以上BT解释仅限BT的i=i
作者: 王士铭    时间: 2011-8-9 15:56
有这样子写代码的吗?你是想把j自增在赋给j吧!j++就可以啦! j++为1,j=0; 每次都没有改变j的值啊!只是改变了j++的值但没有赋给j j和j++ 是2个对象 进入循环 j=j++执行先赋值 j=0;然后自增 j++ 为1  之前已经赋值给0了不会执行2次赋值吧有点类似于像j=j=j++这个编译过不了的所以这个1 没有赋给j!而是给了j++这么一个对象  你在怎么循环 j都是0  j++自增而已
假如有这个int sum=0来接收 第一次是将j赋给sum,第二次是j++赋给了j
j=j++;////第一次循环 j=0; j++为1并没有赋给j而是j++内部的一个临时对象,一个等号同一个对象不可能执行2次赋值吧!;此时j=0,第二次循环j还是先执行赋值j还是为0 j++为2
sum=j++;//第一次循环 sum=0;j++为1;此时j=1;第二次循环 sum=1;j++等于2将其赋给了j
[ 本帖最后由 王士铭 于 2011-08-09  16:30 编辑 ]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2