AI智能
改变未来

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


第三章 操作符

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自增为12. 遇到i,将i入栈,此时栈内i=13. 遇到;结束运算,出栈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=02. 遇到++,在栈外将i从0自增为13. 遇到;结束运算,出栈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=02. 遇到++,在栈外将i从0自增为13. 遇到;结束运算,出栈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。如果想把结果赋值给较小的类型,就必须使用类型转换(可能出现信息丢失)。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » [Java编程思想] 第三章 操作符