运算符和表达式
运算符: 对字面量或者变量进行操作的符号。
表达式: 用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
int a=10;
int b = 20;
int c= a+ b;
+ :是运算符,并且是算术运算符
a+b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
算数运算符
package com.itheima.arithmeticoprator;public static void main(String[] args) { //+ System.out.println(3 + 2);//5 //- System.out.println(5 - 1);//4 //* System.out.println(7 * 9);//63 //结论:在代码中,如果有小数参与计算,结果有可能不是精确的 System.out.println(1.1 + 1.1);//2.2 System.out.println(1.1 + 1.0);//2.1 System.out.println(1.1 - 1.01);//0.09000000000000008 System.out.println(1.1 * 1.01);//1.1110000000000002 //除法 System.out.println(10 / 2);//5 System.out.println(10 / 3);//3→整数参与计算结果只能是整数 System.out.println(10.0 / 3);//3.3333333333333335 //求模运算--实际为除法运算,结果取余数而已 System.out.println(10 % 2);//0 System.out.println(10 % 3);//1}
小测试:输入一个三位数,分别输出他的个位、十位、百位。
import java.util.Scanner; public class Test1 { public static void main(String[] args) { //键入一个三位数,获取其中的个位、十位、百位 //键盘录入 Scanner sc = new Scanner(System.in); System.out.println("请输入一个三位数:"); int number = sc.nextInt(); //获取各各位置 int ge = number % 10; int shi = number / 10 % 10; int bai = number / 100 % 10; System.out.println(ge); System.out.println(shi); System.out.println(bai); }
}
"+"的三种情况
数字相加
隐式转换(自动类型提升)
隐式转换的两种规则:
- 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算
- byte short char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
强制转换
如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的。如果一定要这么做就需要加入强制转换
格式: 目标数据类型 变量名=(目标数据类型)被强转的数据
例子
double a = 12.3;
int b = (int)a;
字符串相加
1、当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符了会将前后的数据进行拼接,并产生一个新的字符串。
2、连续进行"+"操作时,从左到右逐个执行
用代码演示
System.out.println("123" + 123);//"123123"字符串
System.out.println(1+2+"123");//"312",从左到右依次计算,第一个加法左右都是数字,进行相加运算,然后在进行字符串相加//注意,没有双引号的可能是变量,有双引号的一定是变量
int age = 18;
System.out.println("我的年龄是"+ age +"岁");
//我的年龄是18岁
System.out.println("我的年龄是"+ "age" +"岁");
//我的年龄是age岁
字符相加
前面学到char类型在计算的时候会自动提升为char进行计算
char c = 'a';
int result = c + 0;
System.out.println(result);//97
当进行字符+字符或字符+数字时,会把字符通过ASCII码表查询到对应的数字再进行计算。
ASCII中,A对应65,a对应97
但是在有字符串时,进行的是拼接操作哦!
System.out.println(1 + 'a'); //98
System.out.println('a' + "abc"); //aabc
自增自减运算符
基本用法
符号:++
说明:变量值加1
符号:–
说明:变量值减1
代码示例
int a = 10;
a++;
System.out.printl(a);//11
++a;
System.out.printl(a);//12
a--;
System.out.printl(a);//11
--a;
System.out.printl(a);//10
以++为示例,参与运算时,当++放在变量前面,先进行加1,在进行运算;当++放在变量后面,先进行运算,再加1.
代码示例
int x = 10;
int y = x++;//后++,先用后加
int z = ++y;//前++,先加后用
System.out.printl("x:" + x);//12
System.out.printl("y:" + y);//10
System.out.printl("z:" + z);//12
赋值运算符
符号:=
作用:赋值
说明: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
//+=
int a = 10;
int b = 20;
a += b;//把a+b,再把结果赋值给左边的变量a
//等同于 a=(int)(a + b);
System.out.println(a);//30
System.out.println(b);//20 //细节:
//+=,-=,*=,/=,%=底层都隐藏了一个强制类型转换
short s = 1;
//把左边和右边进行相加,得到结果2,再赋值给左边的变量
s += 1;//等同于:s = (short)(s + 1);
System.out.println(s);//2
关系运算符
符号:==
说明:判断a和b的值是否相等,成立为true,不成立为false
符号:!=
说明:判断a和b的值是否不相等,成立为true,不成立为false
符号:>
说明:判断a是否大于b,成立为true,不成立为false
符号:>=
说明:判断a是否大于等于b,成立为true,不成立为false
符号:<
说明:判断a是否小于b,成立为true,不成立为false
符号:<=
说明:判断a是否小于等于b,成立为true,不成立为false
注意事项:关系运算符都是boolean类型,要么时true,要么时false。注意不要把“==”写成"="。
代码实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入我们自己的时髦程度:");
int myfashion = sc.nextInt();
System.out.println("请输入对象的时髦程度:");
int girlfashion = sc.nextInt(); boolean result = myfashion > girlfashion; System.out.println(result);
逻辑运算符
- 在数学中,一个数据x,大于5,小于15,我们可以这样来进行表示:5<x<15.
- 在Java中,需要把上面的式子先进行拆解,再进行合并表达。
- 拆解为:x>5 和 x<15
- 合井后:x>5&x<15
分类
符号: &
作用:逻辑与(且)
说明:并且,两边都为真,结果才为真
符号: |
作用:逻辑或
说明:或者,两边都为假,结果才为假
符号: ^
作用:逻辑异或
说明:相同为假,不同为真
符号: !
作用:逻辑非
说明:取反
代码示例
// &并且
System.out.println(true & true);//true
System.out.println(false & false);//false
System.out.println(true & false);//false
System.out.println(false & false);//false // |或者
System.out.println(true | true);//true
System.out.println(false | false);//false
System.out.println(false | true);//true
System.out.println(true | false);//true // ^异或
System.out.println(true ^ true);//true
System.out.println(false ^ false);//false
System.out.println(true ^ false);//false
System.out.println(false ^ true);//true // !非
System.out.println(!true);//false
System.out.println(!false);//true
短路逻辑运算符
短路与:&&
结果和&相同,但是具有短路效果
不满足A则不再判断B
短路或:||
结果和|相同,但是具有短路效果
满足了A则不再判断B
代码示例
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b > 5;
//由于++a < 5为false,不再判断后面的++b > 5,形成短路效果,同时,++b没有运算,所以不会自增。
System.out.println(result); //false
System.out.println(a); //11
System.out.println(b); //10
[!NOTE] 注意事项
&、 | ,无论左边 true false,右边都要执行&& 、||,如果左边能确定整个表达式的结果,右边不执行。
&&:左边为false,右边不管是真是假,整个表达式的结果一定是false。
||:左边为true,右边不管是真是假,整个表达式的结果一定是true。
最常用的逻辑运算符:&&、||、!
三元运算符
格式: 关系运算符 ? 表达式1 : 表达式2
示例: 求两个数的较大值
a > b ? a : b;
解释,如果a大于b,则输出a,否则输出b
注意:直接用是会报错的。
用法:
①int max = a > b ? a : b;
②System.out.println(a > b ? a : b);
代码示例
//定义三个数
int height1 = 150;
int height2 = 210;
int height3 = 165;
//第一个数和第二个数比较,大者赋值给一个临时变量
int temp = height1 > height2 ? height1 : height2;
//再拿高的一个和第三个数比较
int max = temp > height3 ? temp : height3;
System.out.println(max);
运算符优先级
PS:小括号大于一切,养成加小括号的习惯