JAVA中有个小疑问 int a = 1; a = a++; System.out.println("a:"+a);

但是为什么inta=1;a=++a;//这里为什么会有警告theassignmenttovaribleahasnoeffectSystem.out.println("a:... 但是为什么
int a = 1;
a = ++a; //这里为什么会有警告the assignment to varible a has no effect
System.out.println("a:"+a);
我不理解啊,不是都用到a最后输出了吗,为什么++a会说分配的变量无效?
展开
 我来答
yuanyuan7891
2016-07-10 · TA获得超过527个赞
知道小有建树答主
回答量:286
采纳率:80%
帮助的人:108万
展开全部
不是说分配的变量无效,而是说变量的赋值无效。assignment 应该理解为赋值。

我自己试了下,
int a=1;
a=a;//有警告 a=1
a=++a;//有警告 a=2
a = a++;//没有警告a=1
查了资料是这么解释的:
a=a;不会改变a的值是无效的赋值操作。
a=++a;因为++a是对a的值进行自增已经隐含了对a赋值的操作,a=++a 就等价于:
a=a+1;int temp = a;//(先自增再取值)
a=temp;
这样编译器看来temp和a是等价的,既然a=temp就和a=a一样不会改变a的值,赋值是无效的,就给了个警告。

最后说说为什么a=a++;为什么没有警告:
这个等价于:
int temp=a;a=a+1;//(先取值再自增)
a=temp;
注意这temp的值是a自增之前的值1,然后a自增为2,然后用a++表达式的值1,对a赋值,所以最后a的值是1。所以,在编译器看来这个赋值操作改变了a的值,所以是有用的。
rqz1989
2016-07-10 · TA获得超过182个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:111万
展开全部
因为++a 和 a 是同一个值啊,你把自己复制给自己,所以说无效嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heptnaol
2016-07-10 · TA获得超过7263个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1819万
展开全部
警告是说,这个赋值操作没有效果,意思就是说a的值不会改变,这句是多余的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式