Java初学之运算符

Java初学之运算符

  • 使用+,-,*,/表示加减乘除, %为取余

  • 当参与/运算的两个操作数都是整数时,表示整数除法,否则为浮点除法

    int paperWidth = 5;
    int paperHeight = 2;
    System.out.println(paperWidth / paperHeight);  // 2
    
    double paperWidth = 5;
    int paperHeight = 2;
    System.out.println(paperWidth / paperHeight);  // 2.5
    
    double paperWidth = 5.0;
    int paperHeight = 2;
    System.out.println(paperWidth / paperHeight);  // 2.5
    
  • 整数除以0会产生异常,浮点数除以0会得到无穷大或者NaN

    public class FirstSample
    {
    
        public static void main(String[] args)
        {
            double paperWidth = 1.0;
            int paperHeight = 0;
            System.out.println(paperWidth / paperHeight);
        }
    }
    

    Infinity

    public class FirstSample
    {
    
        public static void main(String[] args)
        {
            int paperWidth = 1;
            int paperHeight = 0;
            System.out.println(paperWidth / paperHeight);
        }
    }
    
    

    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at FirstSample.main(FirstSample.java:8)

数学函数与常量

函数 方法
平方根 Math.sqrt(x);
幂运算 Math.pow(x, a);
指数函数 Math.exp
对数函数 Math.log
以10为底的对数 Math.log10

数值类型之间的转换

image-20220214201549753

  • 实心箭头表示无信息丢失的转换

  • 虚箭头表示可能有精度损失的转换

    public class FirstSample
    
    {
    
        public static void main(String[] args)
        {
            int n = 123456789;
            float f = n;
            System.out.println(f);
        }
    }
    // 1.23456792E8
    

二元操作的数据自动转换

  • 如果两个操作数中有一个是double 类型, 另一个操作数就会转换为double类型。
  • 否则, 如果其中一个操作数是float 类型, 另一个操作数将会转换为float类型。
  • 否则, 如果其中一个操作数是long 类型, 另一个操作数将会转换为long类型。
  • 否则, 两个操作数都将被转换为int 类型。

强制类型转换(cast)

double x = 9.997;
int nx = (int) x; // 9
  • Math.round对浮点数进行舍人运算, 以便得到最接近的整数

    double x = 9.997;
    int nx = (int) Math.round(x); // 10
    
    • 由于round方法返回的结果为long 类型,由于存在信息丢失的可能性, 所以只有使用显式的强制类型转换才能够将long 类型转换成int 类型。

结合赋值和运算符

  • 使用方法

x += 4 // 等价于 x = x + 4
```

  • 如果运算符得到的值类型与左侧操作数的类型不同,就会发生强制类型转换

    int x = 1;
    x += 1.5; // 2,相当于x = (int)(x+ 3.5)
    

自增与自减运算符

  • 基本使用

    int n = 12;
    n++ //13
    
  • 自增与自减会有前缀和后缀形式

    • 前缀形式会先完成加1

    • 后缀形式会使用变量原来的值

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

关系和boolean运算符

大小判断:==,<,>,<=,>=, !=

逻辑运算:

运算符 说明
&&
||
!
  • &&和||按照“短路”的方式来求值:如果第一个操作数已经能够确定表达式的值, 第二个操作数就不必计算了。

    例如:

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

    如果x等于0,那么第二部分就不会计算了,因此,如果x为0,也就不会计算1/x,除以0的错误就不会出现

三元操作符

格式为:?:,表达式如下:

condition ? expression1 : expression2;

如果condition为真,则执行expression1,否则执行expression2

例如:

x < y ? x : y;

该行表示返回x和y中较小的那个

位运算符

运算符 说明
& and
| or
^ xor(异或)
~ not
>> 右移
<< 左移

注:>>>运算符会用0填充高位,>>会用符号填充,不存在<<<

简单区别如下,具体区别见Java >> and >>> bitwise shift operators)

  • >>:右移n位后,它会保留符号(正数或负数)
  • >>>:右移n位,它将忽略符号

运算优先级

注意点:+=是右结合运算符

a += b += c; 
    //等价于 
a += (b += c)

枚举类型

enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARCE}
// 声明变量
Size s = Size.MEDIUM;

变量的取值只在一个有限的集合内。例如: 销售的服装或比萨饼只有小、中、
大和超大这四种尺寸。

posted @ 2022-02-14 20:45  zlbingo  阅读(54)  评论(0)    收藏  举报