JavaSE Day2
1、算术运算符
什么是算术运算符,什么是表达式
运算符就是对常量和变量操作的符号;表达式的意思是用运算符吧常量或变量联系起来的式子
包括
一元运算符
二元运算符
算术赋值运算符
一元运算符
运算符 | 名称 | 说明 | 例子 |
---|---|---|---|
- | 取反符号 | 取反运算 | b=-a |
++ | 自加一 | 先加一在取值,或先取值在加一 | ++a或a++ |
– | 自减一 | 先减一在取值,或先取值在减一 | –a或a– |
举例说明
public class Test {
public static void main(String[] args) {
int a = 5;
System.out.println(-a); //1.对a取反
int b = a++;
System.out.println(b); //2.先赋值给b,a在自己加1
b = ++a;
System.out.println(b); //3.a先自己加一在赋值
}
}
输出结果如下图所示:
1.对a取反等于-5
2.先把a等于5赋值给b,所以b为5,然后a自加1变为6,所以输出b等于5
3.经过2步骤,a等于6,在线自加1,等于7,在赋值给b,所以b=7,输出-7
二元运算符
运算符 | 名称 | 说明 | 例子 |
---|---|---|---|
+ | 加 | 求a加b的和,还可以用于字符串拼接 | a+b |
- | 减 | 求a减b的差 | a-b |
* | 乘 | 求a乘b的乘积 | a*b |
/ | 除 | 求a除以b商 | a/b |
% | 取余 | 求a对b取余 | a%b |
优先级上*、/、%高于+、-
单引号的+是算术运算符用于相加,双引号的加是连接作用,不是相加作用
举例子
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println(a+b); //加
System.out.println(a-b); //减
System.out.println(a*b); //乘
System.out.println(a/b); //除
System.out.println(a%b); //取余
}
}
结果如下:
思考:字符的”+“操作
int a = 1;
char b = 'a';
System.out.println(a+b)
当char与a进行运算的时候,会查找Ascll表中字符’a’对应的数值,然后和int进行+运算
ASCLL表是什么东西?
ASCII码是"美国信息交换标准代码"的简称.它包括0~9十个数字,大小写的英文字母及专用符号等95种可打印字符,还有33种控制字符.
案例:数值拆分
分别求三位数个、十、百分位
import java.util.Scanner; //导入java的内部类
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in); //创建对象请从右边开始写new Scanner
//思考,为了程序的健壮性,首先用户输入的不是数字是字符怎么办(解决办法正则表达式),其次输入的不是三位数怎么办(解决办法if判断)
//1.从键盘获取三维数
int number = in.nextInt();
//2.将个位、十位、百位分别提取出来
int gewei = number%10;
int shiwei = number/10%10;
int baiwei = number/100;
System.out.println("个位是:"+gewei);
System.out.println("十位是:"+shiwei);
System.out.println("百位是:"+baiwei);
}
}
赋值运算符
运算符 | 名称 | 说明 | 例子 |
---|---|---|---|
= | 等于 | a=1 | |
+= | 加等于 | a+=1 | |
-= | 减等于 | a-=1 | |
*= | 乘等于 | a*=1 | |
/= | 除后等于 | a/=1 | |
%= | 取余后赋值 | a%=1 |
扩展的数值运算符隐含了强制类型转换
public class Test {
public static void main(String[] args) {
char ch1 = 'a';
int num = 5;
System.out.println(ch1 += num); //ch1 = ch1 + num,ch1+num小转大,变为int型,然后被强制转换为char型
}
}
关系运算符
符号 | 说明 |
---|---|
== | a==b,判断a和b的值是否相等,成立为true,不成立false |
!= | a!=b判断a和b是否不等于,成立为true,不成立为false |
> | a>b,判断a是否大于b,成立为true,不成立为false |
>= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
< | a<b,判断a是否小于b,成立为true,不成立为false |
<= | a<=b,判断是否小于等于b,成立为true,不成立为false |
逻辑运算符
连接关系表达式的运算符,也可以直接练习布尔类型的常量或变量
操作符 | 描述 | 例子 |
---|---|---|
& | 逻辑与 | a&b,a和b都是true就是true,否则为false |
| | 逻辑或 | a|b,a和b都是false,结果为false,否则为true |
^ | 逻辑异或 | a^b,a和b结果不同,不同为false |
! | 逻辑非 | !a,结果正好和a的结果的相反 |
public class Test {
public static void main(String[] args) {
char ch = 'a';
int number = 96;
System.out.println(ch & number);
//将'a'化为2进制,0110 0001
//96的二进制为, 0110 0000
//按位&得, 0110 0000----->是进制为96
}
}
短路逻辑运算符 && ||
名如其意,其短路作用
逻辑与,左边为真,右边运行;左边为真,右边不执行
逻辑或,左边为真,右边不执行;逻辑或,左边为假,右边为真
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int k = 30;
System.out.println(true && a++ >100); //逻辑与,左边为真,右边运行
System.out.println(a); //11
System.out.println(false && a++ >100); //逻辑与,左边为真,右边不执行
System.out.println(a); //11
System.out.println(true || b++ > 100); //逻辑或,左边为真,右边不执行
System.out.println(b); //20
System.out.println(false || b++ >100); //逻辑或,左边为假,右边为真
System.out.println(b); //21
}
}
位运算符
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位**都是1**,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位==都是 0==,则结果为 0,否则为 1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
三元运算符
关系表达式?表达式1:表达式2
a>b?a:b
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a > b? a:b);
}
}
思考
java内存模型、变量存储
public class Test { public static void main(String[] args) { int a = 1; a = a++; System.out.println(a); //a = 1 } }