运算符:对字面量或变量进行操作的符号
表达式:用运算符把字面量或者变量连接起来,符合Java语法的式子就可以称为表达式
运算符
分类:算术运算符,自增自减运算符,赋值运算符,关系运算符,逻辑运算符,三元运算符
算术运算符
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 参考一年级数学教材![]() |
- | 减 | |
* | 乘 | |
/ | 除 | |
% | 取模,取余 |
总结
- 整数参与计算,得到的结果只会是整数
- 小数参与计算,得到的结果是小数,但有可呢不精准
算术运算符的高级用法(以+为例)
"+" 操作的三种情况
数字相加 字符串相加 字符相加
数字相加
问以下代码c是什么类型的值int or double?
int a = 10;
double b = 12.3;
c = a + b;
结果为double
再问以下代码c是什么类型的值int or double?
int a = 10;
double b = 20.0;
c = a + b;
注:数字进行运算时,数据类型不一样不能运算,需要转换成一样的才可以运算。
用以上两个问题引出类型的转换
类型转换
注:byte<short<int<long<float<double
类型转换分为隐式转换(取值范围小的值转变为范围大的值)和强制转换(取值范围大的数值转变为数值小的数值)
隐式转换:又叫自动类型提升
int a=10;
double b=a;
这时b变为10.0
隐式转换两种提升规则
- 取值范围小的,和取值范围大的进行运算,小的会提升为大的,再进行运算
- byte short char三种类型的数据在运算的时候,都会直接先提升为int,再进行运算
int a=10;
double b=12.3;
c=a+b;
//c的结果为double类型
byte a=10;
byte b=12;
c=a+b;
//c的结果为int类型
强制转换
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据
double a = 12.3;
int b = (int) a;
byte a = 10;
byte b = 20;
byte result = (byte)(a+b);
注意:把数值的大转变为数值小的,不可以直接转,要加入强制转换
字符串相加
当"+" 在操作中出现字符串时,这个"+" 是字符串连接符,而不是算术运算符了。会将前后字符拼接产生新的字符串。
"123"+123//结果为"123123"
连续的进行"+"操作时,从左到右逐个相加
1+2+"你好"//结果为"3你好"
int a = 10;
System.out.println("我的年龄是"+age+"岁");//我的年龄是10岁
System.out.println("我的年龄是"+"age"+"岁");我的年龄是age岁
字符相加
当字符+字符 或者 字符+数字时,会把字符串通过ASCII码表查询到对应的数字在进行计算
System.out.println(1+"a");//98
System.out.println("abc"+"a");//abca
自增自减运算符
基本用法
符号 | 作用 | 说明 |
---|---|---|
++ | 加 | 变量的值加1 |
-- | 减 | 变量的值减1 |
自增自减运算符的两种用法
单独使用:++或者--无论放在变量的前还是后,单独写一行结果都一样。
参与计算:++或者--用在后面是先用后算,用在前面是先算后用
int a = 10;
int b = a++;
//符号在后面,先用后加,所以b的值为10,a的值变为11
int a = 10 ;
int b = ++a;
//运算符在前,先加后用,所以a的值为11 b为11
赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | int a=10,将10赋值给变量a |
+= | 加后赋值 | a+=b,将a+b的值给a |
-= | 减后赋值 | a-=b,将a-b的值给a |
*= | 乘后赋值 | a*=b,将axb的值给a |
/= | 除后赋值 | a/=b,将a/b的值给a |
%= | 取余后赋值 | a%=b,将a/b的余数给a |
其底层都隐藏了一个强制类型转换
关系运算符
逻辑运算符
短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 结果与&相同,两个都为真结果才为真 |
|| | 短路或 | 结果与|相同,两个为假,结果才为假 |
短路效果:当左边的可以确定真假,右边就不参与运算
三元运算符
可用于判断
格式:关系表达式?表达式1:表达式2;
判断关系表达式,如果关系表达为真执行表达式1,反之假执行表达式2