黑马程序员技术交流社区

标题: 关于a++在java内的编译过程 [打印本页]

作者: liwu    时间: 2015-10-12 11:16
标题: 关于a++在java内的编译过程
最近课堂上学到的a++问题
老师说a++可以认为是Java内部产生一个临时变量
将a的值赋给了临时变量
但是从我接触到的一个问题发现好像不是这样

我接触到一个错误:

        int a=1;
        a++=5;

编译时显示错误:

test5.java:6: 错误: 意外的类型
                a++=5;//1=5
                 ^
  需要: 变量
  找到:    值
1 个错误

那么这样子就不能理解了
如果像老师所说的:
        int a=1;
        a++=5;
上面两行应该是等同于:
        int a=1;
        int temp;
        temp=a;
        temp=5;
        a=a+1;
那么像这样子的程序我编译了一下是不会报错的
那么错误在哪里呢?
再仔细看看上面的错误
a++=5;
显示需要“变量”,找到“值”
需要变量是可以理解的,=右边是常量,左边需要赋值给变量
找到“值”的意思是程序找到的是一个值
那么我在此大胆地猜测一下:
并没有产生临时变量这个说法
应该是把整个a++都替换成了一个常量
这个常量的值等于a的值
所以a++=5就变成了1=5
我再次编译了一段代码:

        int a=1;
        1=5;

编译时显示错误:

test5.java:6: 错误: 意外的类型
                1=5;
                ^
  需要: 变量
  找到:    值
1 个错误

可以看到,这个错误和上面的错误是完全一模一样的
所以我认为a++在参与运算时
并不是产生了临时变量
而是将整个a++替换成了一个常量

以上仅代表个人观点
欢迎大家交流指导
作者: jyf823691221    时间: 2015-10-12 14:05
可以这样想,a++语句首先返回的是一个右值,这个右值保存的是a自增之前的值,因此你将5赋值给一个右值就会报错
作者: chengaq0    时间: 2015-10-12 16:04
语法错误,你写的是基本数据类型的赋值语句
声明变量并赋值
int 变量名 = 值(可以是表达式,常量)
等号两边的内容不能互换
也就是说不能写成 int 值 = 变量名   
你写的int a = 1; //这个是正确的
a++ = 5;//a++是一个表达式,不能放在等号左边,左边只能是变量名或引用名
作者: 0925李超月    时间: 2015-10-12 16:57
a++  是先赋值或者比较,后增加




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