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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 滔哥 黑马帝   /  2014-8-13 17:39  /  6203 人查看  /  22 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

声明变量以后,可以使用赋值语句为它赋一个值。在Java中,我们用一个等号(=)作为赋值运算符。赋值语句的语法是:
  1. x = 1;
复制代码

如果我们在声明一个变量的同时为它赋值,这种行为一般叫做初始化:

  1. int x = 1;
复制代码

我们也可以在一条语句中给多个变量赋值:

  1. x = y = z = 1;
复制代码
对于数学计算,Java还有一套更加简捷的赋值运算,它们的作用是对变量当前的值进行修改,然后再重新赋值给这个变量的情况,例如:

  1. i += 1;    //相当于
  2. i = i + 1;
复制代码

这两条语句是一样的,第一种形式的“+=”叫做加法赋值运算符。相应的,我们还有减法赋值运算符、乘法赋值运算符、除法赋值运算符和求余运算符。

  1. i -= 1;   i = i – 1;
  2. i *= 1;   i = i * 1;
  3. i /= 1;   i = i / 1;
  4. i %= 1;   i = i % 1;
复制代码

另外,Java还有更复杂一些的自增运算符:

  1. ++i 前置自增运算符,相当于i = i + 1
  2. i++ 后置自增运算符,相当于i = i + 1
  3. --i 前置自减运算符,相当于i = i - 1
  4. i-- 后置自减运算符,相当于i = i - 1
复制代码
尽管前置和后置都是将变量i的值进行修改,但是在本质上还是有所不同的。下面我们来解释一下前置和后置的区别,大家要好好体会:

  1. //后置自增运算符
  2. j = i++;  //相当于:
  3. j = i;
  4. i = i + 1;
  5. //前置自增运算符
  6. j = ++i;   //相当于
  7. i = i + 1;
  8. j = i;
复制代码

很明显,j的结果是不同的,感受到了么?

第12课:String类型

22 个回复

倒序浏览
占个沙发坐坐。
回复 使用道具 举报
i=1;i=i++;如果再输出i的值 结果是1 ,按照 i=i;i=i+1的算法不应该是2么??
回复 使用道具 举报
++i是将两边都加再赋给左边       i++是右边的自加赋给左边
回复 使用道具 举报
学习来了....
回复 使用道具 举报
来学习了   
回复 使用道具 举报
这么给力 涛哥 前排
回复 使用道具 举报
本帖最后由 ⋛⋌⋚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.

回复 使用道具 举报
太给力了
回复 使用道具 举报
滔哥辛苦  必须顶起!
回复 使用道具 举报
“x = y = z = 1;”这样恐怕不行吧?之前遇到过这样定义方式,会报错啊?C语言中可以,java中似乎不行啊?难到这一点上我有不知道的东西,请求明示。
回复 使用道具 举报
哥们来啦
回复 使用道具 举报
刚开始学的时候  老师分不清 =   和==   的区别呢。。。
回复 使用道具 举报
又复习了一遍
回复 使用道具 举报
wfaly 中级黑马 2014-8-23 22:46:34
15#
复习了,Thanks
回复 使用道具 举报
滔哥  一直打成涛哥
回复 使用道具 举报
这么给力 涛哥 前排
回复 使用道具 举报
HMSK 中级黑马 2014-10-14 17:17:10
18#
太赞了,通俗易懂
回复 使用道具 举报
红楼 中级黑马 2014-12-18 19:08:33
19#
i+=1  隐藏了一个强制类型转换   
回复 使用道具 举报
Ogre 中级黑马 2014-12-19 00:03:00
20#
{:3_57:}涛哥弄个目录出来啊,我看你java连接不上,中间缺了几课
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马