首页 > 技术文章 > 运算符

koss 2021-02-23 14:57 原文

运算符这一块基本上所有语言都是差不多的,我们来聊一聊Java的运算符

 

Java语言支持的运算符如下:

 

 

1、二元运算符

  顾名思义,两个元素使用的运算符,这里大家应该是都比较熟悉的:

 1 public static void main(String[] args) {
 2         //二元运算符
 3         int a = 10;
 4         int b = 20;
 5         int c = 25;
 6         int d = 30;
 7 
 8         System.out.println(a + b);
 9         System.out.println(a - b);
10         System.out.println(a * b);
11         System.out.println(a / (double)b);
12     }

下面我们来说一些注意点

  整数运算:

    如果两个操作数有一个为Long, 则结果也为long 没有long时,结果为int。

    即使操作数全为shot,byte,结果也是int.

 

 1 public static void main(String[] args) {
 2         long a = 123121241151211L;
 3         int b = 123;
 4         short c = 10;
 5         byte d = 8;
 6 
 7         System.out.println(a + b + c + d);//long
 8         System.out.println(b + c + d);//int
 9         System.out.println(c + d);//int
10     }

  浮点运算:

    如果两个操作数有一个为double, 则结果为double.

    只有两个操作数都是float, 则结果才为float.

1 public static void main(String[] args) {
2     float a = 3.14565F;
3     double b = 3.194546464;
4     float c = 1.3123123F;
5     System.out.println(a+b); //double类型
6     System.out.println(b+c); //double类型
7     System.out.println(a+c); //float类型
8 }

  关系运算符:

    这里返回的都是一些布尔值:

 

2、取模运算:

  其实就是取余:5 % 3 余2

  其操作数可以为浮点数,一般使用整数。如:5.9%3.9=2.000000004

  要点:

    负数%负数=负数;

    负数%正数=负数;

    正数%负数=正数;

1 public static void main(String[] args) {
2     System.out.println(9 % 4); //1
3     System.out.println(-9 % -4); //-1
4     System.out.println(-10 % 4); //-2
5     System.out.println(9 % -4); //1
6 }

 

3、一元运算符

  自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算, 而自增自减运算符是一个操作数,分为前缀和后缀两种。

1 public static void main(String[] args) {
2     int a = 3;
3     int b = a++; //执行完后,b=3。先给b赋值,再自增。
4     int c = ++a; //执行完后,c=5。先自增,再给b赋值
5 }

  注意:java中的乘幂处理

1 public static void main(String[] args) {
2     int a = 3^2; //java中不能这么处理, ^是异或符号。
3     double b = Math.pow(3, 2);
4 }

Math类提供了很多科学和工程计算需要的方法和常数。特殊的运算都需要运用到方法(后面会写一篇和大家一起聊一聊的)

 

4、逻辑运算符

逻辑与:&&和&,逻辑或:||和|,逻辑非:!。

 

逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为 true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断 第二个操作了。 逻辑与只要有一个为false, 则直接返回false. 逻辑或只要有一个为true, 则直接返回true;

 

5、位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型 (byte)等类型。位运算符作用在所有的位上,并且按位运算。

1 A = 0011 1100
2 B = 0000 1101
3 -----------------
4 A&b = 0000 1100
5 A | B = 0011 1101
6 A ^ B = 0011 0001
7 ~A= 1100 0011

 

右移一位相当于除2取商。

左移一位相当于乘2。

【常见面试题:int a=2*8怎样运算效率最快?】

1 public static void main(String[] args) {
2     System.out.println(2 << 3);
3 }

用移位运算 int a=2<<3;

a就是2乘以8 最后结果是16 这是最省内存 最有效率的方法 这个方法确实高效率的。

解释一下:

  2的二进制是10 在32位存储器里面是0000 0000 0000 0010

  左移三位后变成 0000 0000 0001 0000 也就是16

再解释一下,在系统中运算是以二进制的形式进行的。相比来说俩个二进制数相乘运算比移位运算慢一 些。 位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比 加减运算略快, 通常位运算比乘除法运算要快很多。 在现代架构中, 情况并非如此:位运算的运算速度 通常与加法运算相同(仍然快于乘法运算). 详细的需要了解计算机的组成原理!

 

6、拓展运算符:

 

会用就行,多用用就会用

 

7、字符串连接符

“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串 然后再进行连接。

1 //字符串
2 String s1="Hello 中文!";
3 String s2=1+""; //转换成String
4 //int
5 int c = 12;
6 System.out.println("c=" + c);

 

8、三目条件运算符

三目条件运算符,语法格式:

1 x ? y : z
2 x:表达式    得到一个Boolean值,true就用y,false就用z

演示:

public static void main(String[] args) {
    int score = 80;
    String type = score < 60 ? "不及格" : "及格";
    System.out.println("type= " + type);
}

 

9、运算符优先级

从高到低:

 

推荐阅读