java的基础知识,高手进!!

来源:百度知道 编辑:UC知道 时间:2024/06/08 11:55:00
问下面程序的输出结果
public class \\此部分省略
public void main(String[] args){
int i = 0;
i = i++;
System.out.println(i);

}

以下程序错误的是()
1. short s = 1; s = s + 1;

2. short s = 1; s += 1;

知道的请写出详细原因, 里面的s=s+1和s+=1有什么区别? 谢谢
在i=i++中,i不是先=0吗?回后来不是++了吗?怎么输出还是0呢???就是这点不懂

上面输出 0 因为i++这一刻i还是0,等于把0再次赋值给i一次。

下面1错了改为:s = (short)(s + 1); 强制类型转换才可以。

问题补充:在i=i++中,i不是先=0吗?回后来不是++了吗?怎么输出还是0呢???就是这点不懂

答:因为i++这一刻i还是0,等于把0再次赋值给i一次。如果这里改成只有i++把i=去掉的话结果就会不一样了。你要理解i++和++i的不同,这里改成i=++i结果也会不同。

i的值打印出来还是0
i在这里做两件事 先付值,然后自增 赋值后是0 打印出来是0 最后自己增加成了1
1.当然错误啦
短型 的 后边s是短型的 1 是个默认int类型的 所以需要s = (short)s + 1;
2正确 s在原来的基础上递增short类型的1啊 仅此而已

首先说第一个问题:输出应该是0;i=i++的执行过程是这样的,因为“=”是右结合的运算符,所以在执行完i++后,i的值是1;而i的原值0被被另外保存以作赋值运算。然后在把保存的0值赋给i,所以整个语句执行后i的值为0;第二个问题:第一个语句是错误的,应为s是short类型的。而数字默认是int型。把1(int型)赋值给s(short)型需要强制类型转换。而s+=1这样的运算编译器本身会对其进行指令优化。执行过程同s=s+1不一样。s=s+1首先要分配一个short类型的内存单元存放s然后在分配一个int类型的内存单元存放1,然后做运算结果(int型)赋值给s;而s是short型,因此此语句有错。而s+=1是不会另外申请内存单元,在原来的存放s的内存单元的基础上加1,不存在赋值的问题,相当于执行s++,所以无语法错误。

开往下一站 - 经理 四级 12-5 21:28
你简直就是在误人子弟

楼上有个小错误:
short s = 1; s = s + 1;
应该是
short s = 1; s = (short)(s + 1);

byte, char, short 运算的时候都会自动转换成int

所以 s+1 的结果是 int ,必须强制