Java基础--4运算符

来源:互联网 发布:php编程是什么 编辑:程序博客网 时间:2024/06/06 00:13

自增运算符和自减运算符

  因为运算符改变了变量的值,所以它的操作数不能是数值。例如,4++就是一条非法语句。

int m =7;int n = 7;int a = 2 * ++m;    // now a is 16, m is 8int b = 2 * n++;        // now b is 14, n is 8

  建议不要在其他表达式的内部使用++,这样编写很容易令人困惑,并也很容易会产生bug。

关系运算符与boolean运算符

  &&和||是按照“短路”的方式来求值的。如果第一个操作数已经能够确定表达式的值,那么就不必再计算第二个操作数了。这样的方法不仅稍微加快了运行速度,同时也可以避免一些错误的发生。例如:

(x != 0) && (1 / x > x + y) //no division by 0

  当x为0时,不会计算第二部分。如果x为0,1/x不会被计算,就不会出现除以0的错误。

重难点:位运算符

  位运算符不按“短路”方法来运算。在得到结果之前,一定要计算两个操作数的值。

  (^)     逻辑异或          二进制同位对比,不同时结果才为1
  (~)     逻辑非          1变0,0变1
  (<<)    左移           二进制有效位全部向左移制定位数
  (>>)    右移           二进制有效位全部向右移制定位数
  (>>>)   按位右移补零操作符     二进制有效位全部向右移指定位数,同时即使无效位也要用0补上。

warning:对移位运算符右侧的参数需要进行模32的运算(如果左边操作数是long类型,那么要对右侧操作数模64)。例如,1 << 35 与 1 << 3 或 8 是相同的

数学函数与常量

  Math类,包含各种各样的数学函数。
  想要计算一个数值的平方根,可以使用sqrt方法:
  double y = Math.sqrt(4);

  在Java中,没有幂运算,因此要用到Math的pow方法:
  double y = Math.pow(x, a);
  y的值为x的a次幂(x^a)

  Math类提供了一些常用的三角函数:
  Math.sin
  Math.cos
  Math.tan
  Math.atan
  Math.atan2

  还有指数函数以及它的反函数——自然对数以及以10为底的对数:
  Math.exp
  Math.log
  Math.log10

  还提供了两个用于表示π和е常量的近似值:
  Math.PI
  Math.E

  不必在数学方法名和常量名前添加前缀“Math.”,只要在源文件的顶部加上下面的这段代码就可以了:

import static java.lang.Math.*;


数值类型之间的转换

数值类型之间的转换
  在上图,蓝色箭头表示没有信息的丢失;而三个紫色粗线的箭头,表示有可能有精度损失的转换。例如:

int n = 123456789;float f = n;//f值为1.234567892E8

  当使用上面两个数值进行二元操作时(例如 n+f , n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
  ○ 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型;
  ○ 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型;
  ○ 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
  ○ 否则,两个操作数都将被转换为int类型。

重难点:强制类型转换

  如果想对浮点数进行舍入运算,那就需要使用Math.round方法。

double x = 9.997;int nx = (int)Math.round(x);

  使用强制类型转换的原因是因为Math.round()方法返回的结果是一个long类型,存在信息丢失的可能。

warning:如果试图将一个数值进行强制转换,而又超出了目标类型的表示范围,结果就会截断成为一个完全不同的值。例如,(byte)300的实际值为44。

重点:括号与运算符级别

  表达式 a += b += c
  等价于 a += (b += c)
  因为 += 是右边结合运算符

  右结合运算符有
  !   ~   ++   –   +   -   ()(强制类型转换)
  ?:   =   ((+  /  - /  * /  / /  % /  & /  | /  ^ /  << / >> /  >>>)=)

枚举类型

  自定义枚举类型

enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};

  然后,可以声明这种变量:

Size s = Size.MEDIUM;

  Size类型的变量只能存储在这个类型声明中给定的某个枚举值,或者null值。



<———————————————–>
From–《Java核心技术卷·I》

原创粉丝点击