您的位置:首页 > 编程语言 > Java开发

[Java编程思想] 第三章 操作符

2022-03-21 15:44 489 查看

第三章 操作符

3.1 优先级

  请注意,System.out.println()语句中包含“+”操作符,“+”意味着“字符串连接”,并且如果必要,它还要执行“字符串转换”。当编译器观察到一个String后面紧跟着一个“+”,而这个“+”的后面又紧跟和一个非String类型的元素时,就会尝试着将这个非String类型的元素转换为String。

3.2 赋值

  对基本数据类型的赋值很简单。赋值操作符“=”,取右边的值赋给左边。

  但在为对象“赋值”时,对一个对象进行操作时,我们真正操作的是对象的引用。所以倘若“将一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到另一个地方。假若对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。

3.3 算数操作符

  整数除法会直接去掉结果的小数位,而不是四舍五入。

3.4 自动递增和递减

理解前缀式和后缀式执行过程,入栈顺序

  举个例子来说,假设a是int值,则表达式++a就等价于(a = a + 1),递增和递减操作符不仅改变了变量,而且以变量的值作为生成的结果。

3.4.1 前缀式(++i)

  对于前缀递增或递减(如++a或--a),会先执行运算,再生成值。

  先自增,再入栈

int i = 0;
int j = 0;
j = ++i;
问:j=?i=?
--------过程--------------
0. 从=右边开始执行
1. 遇到++,将i从0自增为1
2. 遇到i,将i入栈,此时栈内i=1
3. 遇到;结束运算,出栈
4. j被赋值为1
--------结果--------------
i = 1,j = 1;
因为i先自增,变量为1,1再入栈,从栈中取出1,赋给j

3.4.2 后缀式(i--)

  对于后缀递增或递减(如a++或a--),会先生成值,再执行运算。

  先入栈,再自增

int i = 0;
i = i++;
问:i=?
--------过程--------------
0. 从=右边开始执行
1. 遇到i,将i入栈,此时栈内i=0
2. 遇到++,在栈外将i从0自增为1
3. 遇到;结束运算,出栈
4. i被从栈内取出的i=0赋值
--------结果--------------
i = 0;
因为i入栈时是0,出栈时还是0,所以给i赋值为0

//下面涉及到栈内栈外两个区域

int i = 0;
int j = 0;
j = i++;
问:i=?j=?
--------过程--------------
0. 从=右边开始执行
1. 遇到i,将i入栈,此时栈内i=0
2. 遇到++,在栈外将i从0自增为1
3. 遇到;结束运算,出栈
4. j被从栈内取出的i=0赋值
5. i在栈外被自增为1
--------结果--------------
i = 1,j = 0;
因为i入栈为0,然后变量i自增1,此时i出栈是0赋给j,i为1不变

3.5 关系操作符

  == 对象引用。

  equals() 对象内容(需重写equals()方法,基本类型用==)。

3.6 字符串操作符+

  连接不同的字符串,如果String后面跟着int类型,会将int变量转换为String,通常使用一个空的String后面跟随+和一个基本类型变量,这是一种字符串转换方式。

3.7 截尾和提升

  将float或double转型为整型值时,总是对该数字执行截尾,如果想得到舍入的结果,需要使用java.lang.Math的round()方法。

Math.round()返回最接近的最大整数
3.5=>4
-3.5=>3

  只要类型比int小(即char、byte、short),那么在运算前,这些值自动转换成int。如果想把结果赋值给较小的类型,就必须使用类型转换(可能出现信息丢失)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: