运算符这一块基本上所有语言都是差不多的,我们来聊一聊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、运算符优先级
从高到低: