A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liwu 中级黑马   /  2015-10-12 11:16  /  861 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近课堂上学到的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++替换成了一个常量

以上仅代表个人观点
欢迎大家交流指导

3 个回复

倒序浏览
可以这样想,a++语句首先返回的是一个右值,这个右值保存的是a自增之前的值,因此你将5赋值给一个右值就会报错
回复 使用道具 举报
语法错误,你写的是基本数据类型的赋值语句
声明变量并赋值
int 变量名 = 值(可以是表达式,常量)
等号两边的内容不能互换
也就是说不能写成 int 值 = 变量名   
你写的int a = 1; //这个是正确的
a++ = 5;//a++是一个表达式,不能放在等号左边,左边只能是变量名或引用名
回复 使用道具 举报
a++  是先赋值或者比较,后增加
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马