【Thinking in Java-CHAPTER 3】操作符

优先级

赋值

对象在使用c=d,那么c和d都指向原本只有d指向的那个对象。

image

方法调用中的别名问题:当一个对象作为参数传递到一个函数中,函数改变了这个参数,则改变了传递进来的对象;

image

自增和自减

浮点型的变量也是可以++或--的。

关系操作符

double x=0.1;
double y=0.1;
System.out.println(x==y);

输出:true

Integer x=new Integer(47);
Integer y=new Integer(47);
System.out.println(x==y);
System.out.println(x.equals(y));

输出:false

          true

基本数据类型直接使用==和!=即可,但除此之外的数据类型,如果要比较等价,需要使用equals方法;

逻辑操作符

Integer x=new Integer(47);
Integer y=new Integer(47);
System.out.println(x
&&y); //出错,此处与C/C++不同

短路现象:

image

移位操作符:>>,<<,>>>

>>:

11 >> 2,则是将数字11右移2位
计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。

<<:

3 << 2,则是将数字3左移2位:

计算过程:
  3 << 2
  首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:
  在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

>>>:

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。

类型转换

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

double x=0.5;
System.out.println((int)x);             //0
System.out.println(Math.round(x));         //1
原文地址:https://www.cnblogs.com/XBWer/p/4442608.html