运算符
-
运算符和表达式:
-
运算符:对字面量或者变量进行操作的符号
-
表达式:将字面量或者变量连接起来,并符合java语法的式子。
-
举例说明:
int a = 10; int b = 20; int c = a + b;其中,
+是运算符,并且是算数运算符;a + b是表达式,由于+是算数运算符,所以这个表达式也称之为算数表达式。
-
-
算数运算符:
符号 作用 + 加 - 减 * 乘 / 除 % 取模(取余数) 说明:
-
整数参与计算,结果只能的到整数。如果需要小数结果,需要表达式中出现小数
public class demo { public static void main(String[] args){ System.out.println(10 / 3); System.out.println(10.0 / 3); System.out.println(10 % 3); System.out.println(10.0 % 3); } }运行结果
3 3.3333333333333335 1 1.0
-
如果运算中出现小数,则有可能出现结果不精确。
public class demo { public static void main(String[] args){ System.out.println(3.1 + 2.12); System.out.println(1.1 + 1.1); } }运行结果
5.220000000000001 2.2 -
类型转换:java中存在两种数字转换
-
隐式转换(类型自动提升):取值范围小的自动提升为取值范围为大的
- 由程序自动完成
- 取值范围小的和取值范围大的运算,先将取值范围小的的数据类型提升,后进行运算
byte、short、char类型在运算时,都会先直接提升为int,再进行运算。
- 存储范围大小关系:
double>float>long>int>short>byte
- 由程序自动完成
-
强制转换:取值范围大的强制转换为取值范围为小的
-
格式:
<目标数据类型> <变量名> = (<目标数据类型>) <被强制转换的数据> -
强制转换有可能会导致数据发生错误
public class demo { public static void main(String[] args){ int a = 300; byte b = (byte)a; System.out.println(b); } }运行结果
44 -
-
-
+运算符的三种情况-
数字相加:作为算术运算符,与数学中的加法同理;
-
字符串相加:当
+操作中出现字符串时,则进行拼接字符串,并产生一个新的字符串。(需要注意的是,只要出现字符串后,就会进行拼接字符串。简单来说,只要在+中出现了字符串,则这个+以后的都会执行拼接字符串操作。)public class demo { public static void main(String[] args){ int a = 123; String b = "456"; System.out.println(a + b); } }运行结果
123456如果出现连续的
+,则从左到右逐个执行,并逐个执行以上两条规则public class demo { public static void main(String[] args){ int a = 123; int b = 234; String c = "345"; int d = 456; int e = 567; System.out.println(a + b + c + d + e); } }运行结果
357345456567说明:由于变量 a 和变量 b 都是 int 类型的变量,所以第一个 + 是算数运算符,会计算a和b的和。而遇到变量c这个字符串类型的变量后,就开始拼接字符串。由于a+b+c已经是字符串了,所以后面的d和e会被视作与字符串拼接,所以最后的运行结果是357345456567
-
字符相加:当字符类型,即
char类型与char或者其他数字类型进行相加时,会把字符通过ascii码表查找对应的数字再进行计算。public class demo { public static void main(String[] args){ char a = 'a'; System.out.println(a + 1); System.out.println(a + "bc"); } }运行结果
98 abc
-
-
-
自增自减运算符
符号 作用 说明 ++ 自增 变量的值加1 -- 自减 变量的值减1 说明:
-
自增和自减(
++和--)既可以放在变量的前面,也可以放在变量的后面。放在变量前面是先自增,再执行这一行的其他操作。放在变量后面是先执行这一行的其他操作,再自增。-
前置自增自减:先自增,再执行这一行的其他操作。
public class demo { public static void main(String[] args){ int number = 10; System.out.println(++number); } }运行结果:
11 -
后置自增自减:先执行这一行的其他操作,再自增。
public class demo { public static void main(String[] args){ int number = 10; System.out.println(number++); } }运行结果:
10
-
-
-
赋值运算符
符号 作用 说明 =赋值 将某个值赋值给变量 +=加后赋值 表达式 a += b等价于a = a + b-=减后赋值 表达式 a -= b等价于a = a - b*=加后赋值 表达式 a *= b等价于a = a * b/=除后赋值 表达式 a /= b等价于a = a / b%=取模后赋值 表达式 a %= b等价于a = a % b说明:
-
+=、-=、*=、/=、%=隐藏有强制类型转换(仅适用于byte、short、char数据类型):public class demo { public static void main(String[] args){ short number = 1; number += 1; } }实际等价于
public class demo { public static void main(String[] args){ short number = 1; number = (short)(number + 1); } }原因:因为
byte、short、char类型在运算时,都会先直接提升为int,再进行运算。而java中使用复合赋值运算符进行的+=、-=、*=、/=、%=,会先升级为int类型,再在执行完毕后强制转换为byte、short、char的原有数据类型。
-
-
关系运算符(比较运算符)
符号 说明 == 判断是否相等 != 判断是否不相等 > 判断左侧是否大于右侧 >= 判断左侧是否大于或等于右侧 < 判断左侧是否小于右侧 <= 判断左侧是否小于或等于右侧 关系运算符(比较运算符)的返回结果为boolean类型:如果关系成立,则返回true,不成立返回flase。
-
逻辑运算符
符号 作用 说明 & 逻辑与(且)and 并且,如果表达式两侧都为真,结果为真 |逻辑或 or 或者,如果表达式两侧都为假,结果为假 ^ 逻辑异或 如果表达式两侧相同为false,不同为true ! 逻辑非 取反 && 短路与 结果与 & 相同,具有短路效果 ||短路或 结果与 |相同,具有短路效果-
逻辑与 and
public class demo { public static void main(String[] args){ System.out.println(true & true); System.out.println(false & true); System.out.println(false & false); } }运行结果
true false false说明:逻辑与需要表达式两侧同时为真,最后结果才能为真。若有一侧为假,则整体为假。
提示:在java中逻辑与不可以使用and代替,必须使用
& -
逻辑或 or
public class demo { public static void main(String[] args){ System.out.println(true | true); System.out.println(false | true); System.out.println(false | false); } }运行结果
true true false说明:逻辑或需要表达式两侧同时为假,最后结果才能为假。若有一侧为真,则整体为真。
提示:在java中逻辑与不可以使用or代替,必须使用
| -
逻辑异或
public class demo { public static void main(String[] args){ System.out.println(true ^ true); System.out.println(false ^ true); System.out.println(false ^ false); } }运行结果
false true false说明:逻辑异或需要表达式不同,最后结果才能为真。若表达式两侧相同,结果为假,反之为真。
-
逻辑非
public class demo { public static void main(String[] args){ System.out.println(!true); System.out.println(!false); } }运行结果
false true -
短路逻辑运算符:如果前序表达式已经能确定整个运算结果,就不会再计算后续表达式。
public class demo { public static void main(String[] args){ System.out.println(false && true); System.out.println(true || false); } }运行结果
false true说明:
System.out.println(false && true);:短路与的逻辑与逻辑与相同,即需要表达式两侧同时为真,最后结果才能为真。但是在该行代码中,由于前序表达式已经是假(flase),则不会再次判断后续的表达式是否符合规则。System.out.println(true || false);:短路或的逻辑与逻辑或相同,即需要表达式两侧同时为假,最后结果才能为假。但是在该行代码中,由于前序表达式已经是真(true),则不会再次判断后续的表达式是否符合规则。- 短路逻辑运算符提高了程序运行效率。
-
-
三元运算符
格式:
<关系表达式> ? 表达式1: 表达式2;。运行说明:先运行前序关系表达式,如果关系表达式的结果为true,则运行表达式1;如果关系表达式的结果为假,则运行表达式2。
提示:三元运算符不可以单独使用,必须被使用。即不可以在代码中单独出现一行三元表达式,而是将三元运算符的结果赋值给某个数。(或者其他用途也可以)
public class demo { public static void main(String[] args){ int a = 10; int b = 20; System.out.println(a > b ? a : b); } }在这里,三元表达式的关系表达式是
a > b,即如果结果为真,则返回a,反之为b。