一、运算符概念
运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。Java中提供了丰富的运算符,如赋值运算符、算数运算符、比较运算符、三元运算符等。。
1、算数运算符
1.1、Java中的算数运算符主要有+(加)、-(减)、*(乘以)、/(除以)、%(求余),他们都是二元运算符,Java中算数运算符的功能及使用方式如下表
运算符 | 说明 | 实例 | 结果 |
+ | 加 | 12.45f+15 | 27.45 |
- | 减 | 4.56-0.16 | 4.4 |
* | 乘以 | 5L*12.45f | 62.25 |
/ | 除以 | 7/2 | 3 |
% | 取余数 | 12%10 | 2 |
public class OperatorDemo {
public static void main(String[] args) {
// 定义两个变量
int a = 3;
int b = 4;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
// 整数相除只能得到整数,要想得到小数,就必须有浮点数参与运算
System.out.println(3 / 4.0);
System.out.println(3.0 / 4);
}
}
注意:其中,+ 和 - 运算符还可以作为数据的正负符号,如+5、-7。
在进行除法运算时,0不能做除数,否则系统会抛出:java.lang.ArithmeticException异常。
1.2、算数运算符取余和除法的区别
%:取余运算符,得到的是两个相除数据的余数。常用场景:判断两个数据是否能整除。
/:除法运算符,得到的是两个数据相除的商。
public class OperatorDemo2 {
public static void main(String[] args) {
int a = 5;
int b = 3;
System.out.println(a / b);//结果1
System.out.println(a % b);//结果2
}
}
1.3、字符和字符串参与加法操作
字符串参与运算,其实是拿该字符串的数值来操作
a ----- 97
A ----- 65
0 ------ 48
字符串参与运算,这里其实做的不是加法运算,而是字符串的拼接。字符串和其他类型的数据做拼接,结果是字符串类型的。
public class OperatorDemo3 {
public static void main(String[] args) {
// 整数加法
int a = 10;
int b = 20;
System.out.println(a + b);//结果30
System.out.println("------------------");
// 字符参与加法操作
char c = '0';
char c2 = 'a';
System.out.println(a + c);//结果58
System.out.println(a + c2);//结果107
System.out.println("------------------");
// 字符串参与加法操作
System.out.println("hello" + a);//结果hello10
System.out.println("hello" + a + b); // "hello"+10,然后再和b进行拼接,结果hello1020
System.out.println(a + b + "hello");//结果30hello
}
}
1.4、自增和自减运算符
自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。自增、自减运算符的作用是使变量的值增1或减1.放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算。放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。
/*
* ++a(--a) 表示在使用变量a之前,先使a的值加(减)1
* a++(a--) 表示在使用变量a之后,使a的值加(减)1
* 粗略地分析,++a与a++的作用都相当于a = a + 1.假设 a = 4;则:
* b = ++ a; 先将a的值加1,然后赋值给b,此时a值为5,b值为5
* 再看另外一个语法,同样假设a = 4;则:
* b = a ++; 先将a的值赋值给b,再将a的值变为5,此时a值为5,b值为4
*/
1.5、赋值运算符
a、分类:
基本的赋值运算符:=
扩展的赋值运算符:+=、-=、*=、/=、%=
注:+=:a += 20;相当于a = (a的数据类型)(a + 20);
/*
* 赋值运算符:
* A:基本 =
* B:扩展 +=,-=,*=,...
*
* +=:
* a+=20;
* 相当于
* a = (a的数据类型)(a + 20);
*/
public class OperatorDemo {
public static void main(String[] args) {
// 把10赋值给int类型的变量a
int a = 10;
// += 把左边和右边的数据进行运算,最后赋值给左边。左边的只能是变量
a += 10;// 相当于a = a + 10
System.out.println("a:" + a);//结果a:20
System.out.println("----------------------");
short s = 10;
// s += 20; // 相当于 s = s + 20;
s = (short) (s + 20);
System.out.println("s:" + s);//结果s:30
}
}
1.6、关系运算符
关系运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。当运算符对应的关系成立时,运算结果为true,否则为false。所有关系运算符通常作为判断的依据用在条件语句中。关系运算符共有6个。见下表....
关系运算符
运算符 | 作用 | 举例 | 操作数据 | 结果 |
> | 比较左方是否大于右方 | 'a' > 'b' | 整型、浮点型、字符型 | false |
< | 比较左方是否小于右方 | 156 < 456 | 整型、浮点型、字符型 | true |
== | 比较左方是否等于右方 | 'c' == 'c' | 基本数据类型 | true |
>= | 比较左方是否大于等于右方 | 479 <= 426 | 整型、浮点型、字符型 | true |
<= | 比较左方是否小于等于右方 | 12.45 <= 45.5 | 整型、浮点型、字符型 | true |
!= | 比较左方是否不等于右方 | 'y' != 't' | 基本数据类型、引用数据类型 | true |
/*
* 关系运算符:
* ==,!=,>,>=,<,<=
* 关系运算符的结果是boolean类型。
*
* 注意:
* 千万不要把==写成=
*/
public class OperatorDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
System.out.println(a == b);//结果false
System.out.println(a == c);//结果true
System.out.println("-----------------");
System.out.println(a != b);//结果true
System.out.println(a != c);//结果false
System.out.println("-----------------");
System.out.println(a > b);//结果false
System.out.println(a > c);//结果false
System.out.println("-----------------");
System.out.println(a >= b);//结果false
System.out.println(a >= c);//结果true
System.out.println("-----------------");
int x = 3;
int y = 4;
// System.out.println(x == y);
// System.out.println(x = y);// 把y赋值给x,把x的值输出
boolean bb = (x == y);
// 报错
// boolean cc = (x = y);
int cc = (x = y);
}
}
1.7、逻辑运算符
A:逻辑运算符有哪些:&、|、^、!以及&&、||
B:注意事项:
a:逻辑运算符的操作元必须是boolean型的数据
b:表达式:就是用运算符把常量或者变量连接起来的符合Java语法的式子。
算数表达式:a + b
比较表达式:a == b(条件表达式)
C:结论:
&逻辑与:有false则false
|逻辑或:有true则true
^逻辑异或:相同为false,不同为true
!逻辑非:非false则true,非true则false
特点:偶数个不改变本身
/*
* 逻辑运算符:用于连接关系表达式。
* &,|,^,!
* &&,||
*
* 与:& 有false则false
* 或:| 有true则true
* 异或:^ 相同则false,不同则true。(男女朋友)
* 非:! true则false,false则true
*/
public class OperatorDemo {
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((a > b) & (a < c)); // false & true
System.out.println((a < b) & (a < c)); // true & true
System.out.println("---------------");
System.out.println((a > b) | (a > c));// false | false
System.out.println((a < b) | (a > c)); // true | false
System.out.println((a > b) | (a < c)); // false | true
System.out.println((a < b) | (a < c)); // true | true
System.out.println("---------------");
System.out.println((a > b) ^ (a > c));// false ^ false
System.out.println((a < b) ^ (a > c)); // true ^ false
System.out.println((a > b) ^ (a < c)); // false ^ true
System.out.println((a < b) ^ (a < c)); // true ^ true
System.out.println("---------------");
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false
System.out.println(!!(a > b)); // !!false
}
}
~逻辑运算符&&与&的区别
A:&&和&的区别?
a:最终结果一样。
b:&&具有短路效果。左边是false,右边不执行。&是无论左边是false还是true,右边都会执行
B:||和|的区别?
a:最终结果一样
b:||具有短路效果.左边是true,右边不执行,|是无论左边是false还是true,右边都会执行。
/*
* &&和&的结果一样
* ||和|的结果一样
*
* &&和&的区别:
* &&如果左边是false,右边不执行。
* &无论左边是true还是false,右边都会执行。
*/
public class OperatorDemo2 {
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((a > b) && (a < c)); // false && true
System.out.println((a < b) && (a < c)); // true && true
System.out.println("---------------");
System.out.println((a > b) || (a > c));// false || false
System.out.println((a < b) || (a > c)); // true || false
System.out.println((a > b) || (a < c)); // false || true
System.out.println((a < b) || (a < c)); // true || true
System.out.println("---------------");
int x = 3;
int y = 4;
// System.out.println((x++ > 4) & (y++ > 5)); // false & false
System.out.println((x++ > 4) && (y++ > 5)); // false && false
System.out.println("x:" + x);
System.out.println("y:" + y);
}
}
1.8、位运算符
关于位运算符,我这里只阐述技巧,因为开发中不常用,只用于应对面试。
~~位运算符适用于的数据类型有:byte、short、char、int和long
~~位运算符可以实现整数除以或乘以2的n次方的效果。例如y<<2与y*4的结果相同,y>>1的结果与y/2的结果相同。也就是说,一个数左移n位,就是数左移n位,就是将这个数乘以2的n次方,一个数右移n位,就是将这个数除以2的n次方。
1.9、三元运算符
A:格式:
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
B:实例:
获取两个数中大数。
int x=3,y=4,z;
z = (x>y)?x:y;//z变量存储的就是两个数的大数
~~~案例
/*
* 三元运算符:
*
* 格式:
* (关系表达式)?表达式1:表达式2;
* 执行流程:
* A:计算关系表达式的值,看是true还是false
* B:如果是true,表达式1就是运算结果
* 如果是false,表达式2就是运算结果
*/
public class OperatorDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = (a > b) ? a : b;
System.out.println("c:" + c);
}
}
/*
* 三元运算符的练习
* 比较两个整数是否相同
*/
public class OperatorTest {
public static void main(String[] args) {
// 定义两个int类型的变量
int a = 10;
int b = 20;
boolean flag = (a == b) ? true : false;
// boolean flag = (a == b);
System.out.println(flag);
}
}
/*
* 获取三个整数中的最大值
*/
public class OperatorTest2 {
public static void main(String[] args) {
// 定义三个int类型的变量
int a = 10;
int b = 30;
int c = 20;
// 先比较两个整数的大值
int temp = ((a > b) ? a : b);
int max = ((temp > c) ? temp : c);
System.out.println("max:" + max);
}
}