黑马程序员技术交流社区
标题:
第11课:赋值语句和赋值表达式
[打印本页]
作者:
滔哥
时间:
2014-8-13 17:39
标题:
第11课:赋值语句和赋值表达式
声明变量以后,可以使用赋值语句为它赋一个值。在
Java
中,我们用一个等号(
=
)作为赋值运算符。赋值语句的语法是:
x = 1;
复制代码
如果我们在声明一个变量的同时为它赋值,这种行为一般叫做初始化:
int x = 1;
复制代码
我们也可以在一条语句中给多个变量赋值:
x = y = z = 1;
复制代码
对于数学计算,Java还有一套更加简捷的赋值运算,它们的作用是对变量当前的值进行修改,然后再重新赋值给这个变量的情况,例如:
i += 1; //相当于
i = i + 1;
复制代码
这两条语句是一样的,第一种形式的“+=”叫做加法赋值运算符。相应的,我们还有减法赋值运算符、乘法赋值运算符、除法赋值运算符和求余运算符。
i -= 1; i = i – 1;
i *= 1; i = i * 1;
i /= 1; i = i / 1;
i %= 1; i = i % 1;
复制代码
另外,Java还有更复杂一些的自增运算符:
++i 前置自增运算符,相当于i = i + 1
i++ 后置自增运算符,相当于i = i + 1
--i 前置自减运算符,相当于i = i - 1
i-- 后置自减运算符,相当于i = i - 1
复制代码
尽管前置和后置都是将变量i的值进行修改,但是在本质上还是有所不同的。下面我们来解释一下前置和后置的区别,大家要好好体会:
//后置自增运算符
j = i++; //相当于:
j = i;
i = i + 1;
//前置自增运算符
j = ++i; //相当于
i = i + 1;
j = i;
复制代码
很明显,j的结果是不同的,感受到了么?
第12课:String类型
作者:
czwanglei
时间:
2014-8-13 17:48
占个沙发坐坐。
作者:
狐狸FMF
时间:
2014-8-13 18:09
i=1;i=i++;如果再输出i的值 结果是1 ,按照 i=i;i=i+1的算法不应该是2么??
作者:
liqiaohui
时间:
2014-8-13 20:25
++i是将两边都加再赋给左边 i++是右边的自加赋给左边
作者:
张周飞
时间:
2014-8-14 09:19
学习来了....
作者:
想做开发
时间:
2014-8-14 09:43
来学习了
作者:
alexchy
时间:
2014-8-14 10:11
这么给力 涛哥 前排
作者:
⋛⋌⋚JEEP
时间:
2014-8-14 18:04
本帖最后由 ⋛⋌⋚JEEP 于 2014-8-14 18:08 编辑
2楼说i=1;i=i++;如果再输出i的值 结果是1 ,按照 i=i;i=i+1的算法不应该是2么??
针对这个问题,我的理解是,java的编译器的问题。在c\c++中结果是2,因为他们的编译器不同所以编译机制也不同。
具体是为什么呢?
可以用java的分解类工具javap看看,i++的情况
iconst_0 //把int类型的值压入栈顶
istore_1 //将int类型的值存入局部变量
iload_1 //从局部变量中装载int类型的值
iinc 1,1 //把常量值1加到局部变量上
istore_1//把栈顶的int类型的值存入变量中
首先,整数常量1存到栈顶(类似缓存空间),然后把栈顶的值赋给int型变量i ,将“int i =1”加载入栈,
栈中变量i自增1,此时i=2,(直到这里我们讨论的都是“=”右边的部分)
最后,把栈顶的1赋值给“=”左边的i,结果i=1还是1.(这里讨论的是“=”左边的部分)
总结:i = i++;先看“=”右边再看“=”左边;看右边时是把i初始的值1先保存到一个内存空间里,然后在栈中i的值自增1,最后JVM并没有将1赋给左边,而是将最初放在栈顶的1值赋给左边的i,所以结果还是1.
作者:
一顿一只牛
时间:
2014-8-14 21:39
太给力了
作者:
钟翠翠
时间:
2014-8-15 10:45
滔哥辛苦 必须顶起!
作者:
依然超级赛亚人
时间:
2014-8-15 15:31
“x = y = z = 1;”这样恐怕不行吧?之前遇到过这样定义方式,会报错啊?C语言中可以,java中似乎不行啊?难到这一点上我有不知道的东西,请求明示。
作者:
华谦
时间:
2014-8-17 10:30
哥们来啦
作者:
毛富强
时间:
2014-8-20 09:52
刚开始学的时候 老师分不清 = 和== 的区别呢。。。
作者:
波风梅西
时间:
2014-8-21 14:21
又复习了一遍
作者:
wfaly
时间:
2014-8-23 22:46
复习了,Thanks
作者:
28了还能学吗
时间:
2014-8-29 11:20
滔哥 一直打成涛哥
作者:
wujiemin
时间:
2014-10-7 23:46
这么给力 涛哥 前排
作者:
HMSK
时间:
2014-10-14 17:17
太赞了,通俗易懂
作者:
红楼
时间:
2014-12-18 19:08
i+=1 隐藏了一个强制类型转换
作者:
Ogre
时间:
2014-12-19 00:03
{:3_57:}涛哥弄个目录出来啊,我看你java连接不上,中间缺了几课
作者:
Jennifer
时间:
2014-12-19 00:32
++在前与++在后当时学习的时候也确实巩固了好几天才完完全全弄清楚的,今天看到涛哥的帖子,在复习复习
作者:
wangzhao
时间:
2017-2-28 09:23
顶!d=====( ̄▽ ̄*)b
作者:
baby14
时间:
2019-7-16 07:27
多谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2