Java运算符详解
学习运算符之前,需要先搞清楚运算符和表达式的概念。
1. 运算符的概念
对变量或者常量进行操作的符号被称之为运算符。
2. 表达式的概念
用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。
3. 运算符的分类
3.1算术运算符
算术运算符包括以下几种:
+:加法,包括以下三种情况,
数字相加。
字符相加,拿字符在计算机底层存储的对应的数据值(字符在ASCII码表中对应的数字)来参与运算的。
字符串相加,是进行字符串的拼接,字符串的数据和其他类型的数据进行相加的结果是字符串类型的。
-:减法,整数类型或者小数类型的数据做减法。
*:乘法,整型或者小数类型的数据做乘法。
/:除法,得到的是两个数相除的商。
%模,得到的是两个数相除的余数。
++,对变量的值做加1的处理。如果++是写在变量的后面,是先拿变量原先的值参加运算,再对变量的值加1; 如果++是写在变量的前面,先把原来变量的值加1,再用加1后的数据参加运算。
--,对变量的值做减1的处理,如果--是写在变量的后面,是先拿变量原先的值参加运算,再对变量的值减1; 如果--是写在变量的前面,先把原来变量的值减1,再用减1后的数据参加运算。
代码示例:
public class OperatorDemo1 {
public static void main(String[] args){
int a = 1;
int b = 2;
char c = 'c';
//加法,数字相加
System.out.println(a+b);
//加法,字符相加
System.out.println(a+c);
//加法,字符串和字符串相加,字符串和其他类型的数据相加
System.out.println("hello"+"everybody");
System.out.println("hello"+a);
//乘法
System.out.println(a*b);
//除法,求商
System.out.println(a/b);
//除法,求模
System.out.println(a%b);
//++定义在变量的前面
System.out.println(++a);
//++定义在变量的后面
System.out.println(a++);
//--定义在变量的前面
System.out.println(--b);
//--定义在变量的后面
System.out.println(b--);
}
}
3.2赋值运算符
基本的赋值运算符:=
扩展的赋值运算符:+=、-=、*=、/= 、%=
把左边和右边的结果赋值给左边。
注意:左边不能是常量。
隐含了一个强制类型转换。.
代码示例
public class OperatorDemo2 {
public static void main(String[] args){
int a = 1;
short b = 2;
// +=
a += 10;
b +=20;//b +=20相当于b = (short)(b+20),隐含了一个强制的数据类型转换。
System.out.println(a);
System.out.println(b);
// -=
System.out.println(a -= 1);
// *=
System.out.println(a *= 2);
// /=
System.out.println(a /= 2);
// %=
System.out.println(a %= 2);
}
}
3.3关系运算符
常见的关系比较运算符有:==,!=,>,<,>=,<=。
关系运算符的结果都是boolean型,也就是要么是true,要么是false。
代码示例:
public class OperatorDemo3 {
public static void main(String[] args){
int a = 10;
int b = 20;
// ==
System.out.println(a == b);
// !=
System.out.println(a != b);
// >
System.out.println(a >b);
// <
System.out.println(a <b);
// >=
System.out.println(a >=b);
// <=
System.out.println(a <=b);
}
}
3.4逻辑运算符
作用:逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 && x<6。
逻辑运算符的分类:
与:& 有false则false,无论左边真假,右边都参与运算。
或:| 有true则true,无论左边真假,右边都参与运算。
异或:^ 相同则false,不同则true
非:! true则false,false则true
双与:&&如果左边为true,右边参与运算;当左边判断为false时,整体为false,右边不再参与运算。
双或:|| 如果左边为true,右边不再参与运算,整体为true;如果左边为false,判断右边是否为true。
综上考虑,&&和||的执行效率更高,所以在实际开发中一般都用&&和||。
代码示例:
public class OperatorDemo4 {
public static void main(String[] args){
int a = 10;
int b = 20;
int c = 30;
System.out.println((a>b)& (a>c));// false & false
System.out.println((a<b)& (a>c)); // true & false
System.out.println("---------------");
System.out.println((a>b)| (a>c));// false | false
System.out.println((a<b)| (a>c)); // true | false
System.out.println("---------------");
System.out.println((a>b)^ (a>c));// false ^ false
System.out.println((a<b)^ (a>c)); // true ^ false
System.out.println("---------------");
System.out.println((a>b)); // false
System.out.println(!(a>b)); // !false
System.out.println(!!(a>b)); // !!false
System.out.println("---------------");
System.out.println((a>b)&& (a>c));// false && false
System.out.println((a<b)&& (a>c)); // true && false
System.out.println("---------------");
System.out.println((a>b)|| (a>c));// false || false
System.out.println((a<b)|| (a>c)); // true || false
}
}
3.5三元运算符
格式:
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
代码示例:
public class OperatorDemo5 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = (a>b) ? a :b;
System.out.println("c:" + c);
}
}