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会说分配的变量无效? 展开
int a = 1;
a = ++a; //这里为什么会有警告the assignment to varible a has no effect
System.out.println("a:"+a);
我不理解啊,不是都用到a最后输出了吗,为什么++a会说分配的变量无效? 展开
展开全部
不是说分配的变量无效,而是说变量的赋值无效。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的值,所以是有用的。
我自己试了下,
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的值,所以是有用的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询