目录
运算符与表达式
运算符:对常量和变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合java语法的式子
如下所示,a+b就是一个表达式 "+"就是运算符
int a = 10;
int b = 20;
int c = a+b;
System.out.println(c);
字符的"+"操作
字符是以char进行声明使用单引号括起来的数据类型,单引号只能包含单个字符内容。
字符的"+"操作
//声明两个变量
char a = 'A';
int b = 10;
System.out.println(a+b);
输出结果:75
如上所示,声明了两个变量,一个字符类型,一个整数类型。在进行字符的"+"操作时。因为两个变量的数据类型不一样,所以取值范围小的数据类型会执行一个自我提升。所以这里的字符类型会自动提升到int的整数类型。
而字符提升到整数类型的依据就是按照ascall码值中对应的数值来进行提升的。因为在ascall码中,A对应的数值就是65,所以这里在进行字符的"+"操作的时候,字符类型的A就会依照ascall码值自动提升到和int同类型
则最终的输出结果就是75
有关java中数据的提升,除了应用在字符中,还应用到其它的基本数据类型中。
提升规则:如果一个表达式中包含多个不同的数据类型进行运算,那么最终的结果会以该表达式中取值范围最大的数据类型为最终的数据类型。该表达式中的所有的数据类型都会自动的进行一个自我提升,提升至最大的那个数据类型。提升的依据参照ascall码值
提升顺序: byte,short,char→int→float→double
字符串的"+"操作
字符串是以String来进行声明的使用双引号括起来的数据
字符串的"+"操作实质上就是一个拼接操作,它不会和字符的"+"操作一样进行一个自我提升,因为它属于特殊的数据类型,不能够进行一个自我提升。
String a = "我爱java";
int b =666;
System.out.println(a+b);
//输出结果:我爱Java666
如上所示,只要表达式中包含字符串类型的"+"操作,最终的输出结果都是进行一个拼接的操作。
int a = 10;
int b = 20;
String c ="我是字符串";
System.out.println(a+b+c);
//输出结果:30我是字符串
如上所示,可以看出当存在多个数据类型的变量和字符串类型进行一个"+"的操作,运算顺序是按照从左往右的顺序,如上就是先把变量a和变量b进行完+的操作之后,在将结果与字符串c进行拼接
String a ="我是字符串";
int b = 666;
int c = 888;
System.out.println(a+b+c);
//输出结果我是字符串666888
如上所示,运算顺序是从左往右进行运算,变量b先和字符串a进行了一个拼接操作,成为了一个新的字符串,再由这个新的字符串进行后续的运算。
从左往右进行运算的话,如果存在字符串那么一定会执行一个拼接的操作,并且由这个拼接后的新的字符串继续执行后续的运算,也就是说,在表达式中,只要存在了字符串的"+"操作,那么一般情况下最终的输出结果就是一个字符串
赋值运算符
符号 | 作用 | 说明 |
= | 赋值 | 例:int a =10; 将10赋值给变量a |
+= | 加后赋值 | 例: a +=10; 使用a的初始值进行一个+10的操作 然后将最终结果重新赋值给a |
-= | 减后赋值 | 例: a-=10;使用a的初始值进行一个-10的操作 然后将最终结果重新赋值给a |
*= | 乘后赋值 | 例: a*=10;使用a的初始值进行一个*10的操作 然后将最终结果重新赋值给a |
/= | 除后赋值 | 例: a/=10;使用a的初始值进行一个/10的操作 然后将最终结果重新赋值给a |
%= | 取余后赋值 | 例: a%=10;使用a的初始值和10进行一个除法的操作 然后将最终得到的余数重新赋值给a |
int a = 10;
a +=10;
System.out.println(a);
//输出结果:20
如上所示,就是赋值运算符的运行,其它运算符以此类推,除了最基本的"=" 这只是个赋值运算符 只具备赋值,不具备运算的功能
自增自减运算符
符号 | 作用 | 说明 |
++ | 自增 | 在原始数值上加1 |
-- | 自减 | 在原始数值上减1 |
int a = 10;
a++;
System.out.println(a);
//输出结果: 11
int b = 10;
b--;
System.out.println(a);
//输出结果: 9
如上代码表示的是自增自减单独使用的情况下。
int a = 10;
int b = a++;
System.out.println(a);
//输出结果: 10
int c = 10;
int d = ++c;
System.out.println(d);
//输出结果: 11
如上代码表示的是自增自减在参与操作时的结果,当把自增自减符写在变量的后面的时候,则不会执行自增自减的操作。当把自增自减符写在变量的前面的时候,便执行自增自减的操作
关系运算符
符号 | 说明 |
== | 判断两者是否存在相等关系 |
!= | 判断两者是否为不等于关系 |
> | 判断前者是否为大于后者的关系 |
< | 判断前者是否为小于后者的关系 |
>= | 判断前者是否与后者存在大于等于的关系 |
<= | 判断前者是否与后者存在小于等于的关系 |
关系运算符主要用于判断两者的关系,返回的结果为布尔类型。即true和false
在>=和<=这两个关系运算符中,只要两者之间存在一种关系,结果都为true
int a = 10;
int b =20;
System.out.println(a<=b);
//结果为true
如上代码所示,因为变量a小于变量b,即使没有等于关系,返回结果依旧为true
逻辑运算符
符号 | 作用 | 说明 |
& | 逻辑与 | 左右两边都满足为true的情况下,最终返回结果为true 否则返回false |
| | 逻辑或 | 左右两边只要有一边满足true的情况下,最终返回结果true。否则返回false |
^ | 逻辑异或 | 左右两边的布尔结果相同就返回true,否则返回false |
! | 逻辑非 | 返回与表达式结果相反的布尔值 |
int a = 10;
int b = 20;
System.out.println((a>10)^(b>30));
//输出结果:true
//使用了逻辑运算符中的^(逻辑异或) 在左右两边的布尔值相同的情况下返回true 否则返回false
//如上代码所示 两边的布尔值都是false 所以在^的作用下返回true
int c = 10;
System.out.println(!c>20);
//输出结果 true
//使用了逻辑运算符中的!逻辑非 该运算符的最终返回结果是与表达式相反的布尔值
//如上所示 变量c>20 明显是false 但在!(逻辑非)的作用下 最终返回的结果是与该表达式相反的布尔值
使用!(逻辑非)的时候,如果使用的是奇数个,那么就会返回与表达式相反的布尔值
如果使用的是偶数个,那么就会返回与表达式一样的布尔值
int a = 10;
System.out.println(!a>20);//true
System.out.println(!!a>20);//false
短路逻辑运算符
符号 | 作用 | 说明 |
&& | 短路与 | 和逻辑与的使用一样,但会短路 |
|| | 短路或 | 和逻辑或的使用一样,但会短路 |
短路逻辑运算符和普通的逻辑运算符基本相同,只不过当参与操作的时候,短路逻辑符就会出现
"短路"的情况
短路与&&: 当左边的布尔值为false的时候,右边便不会执行其它操作 左边的布尔值为true的时候 右边执行
短路或||: 当左边的布尔值为false的时候,右边执行其它操作,左边的布尔值为true的时候 右边不会执行其它操作
而正常的逻辑运算符无论左右两边的布尔值为何值两边都会执行其它操作
如下就是短路与 短路或的"短路"情况
int aaa =10;
int bbb=20;
System.out.println((++aaa >20)&&(++bbb >20));//判断依据和普通的逻辑与一样
System.out.println("aaa:"+ aaa);
System.out.println("bbb:"+ bbb);
//输出结果: false aaa:11 bbb:20
int ccc =10;
int ddd=20;
System.out.println((++ccc >20)||(++ddd >20));//判断依据和普通的逻辑或一样
System.out.println("aaa:"+ aaa);
System.out.println("bbb:"+ bbb);
//输出结果: true ccc:11 ddd:21
三元运算符
格式:关系表达式?表达式1:表达式2;
例:a>b?a:b
计算规则:
先计算关系表达式的布尔值,如果结果为true,那么表达式1就是最终的结果 如果结果为false,那么表达式2就是最终的结果
int a = 10;
int b = 20;
System.out.println((a>b)?a:b);
//输出结果:20
//输出原因:依照三元运算符的计算规则 先计算出关系表达式的布尔值 如果为true那么最终的返回值就是表达式1 如果结果为false 那么最终的返回值就是表达式2
//很明显 在上述代码中 a>b的结果为false 所以依照三元运算符的规则 最终的返回结果就是表达式2