Day002_运算符、键盘录入、类型转换
1.运算符:对常量或者变量进行操作运算的符号
2.表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
3.算术运算符:
|
符号 |
作用 |
说明 |
|
+ |
加 |
加法运算,字符串连接运算 |
|
- |
减 |
减法运算 |
|
* |
乘 |
乘法运算,与“×”相同 |
|
/ |
除 |
除法运算,与“÷”相同 |
|
% |
取余 |
获取的是两个数据做除法的余数 |
/和%的区别:被除数 ÷ 除数 = 商(/: 获取除法运算中的商) ... 余数(%: 获取除法运算中的余数)。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
System.out.println( 1 + 1); // 2 System.out.println( 1 - 1); // 0 System.out.println( 1 * 2); // 2 System.out.println( 6 / 2); // 3 System.out.println( 6 % 4); // 2
例:获取一个四位数字的个位,十位,百位,千位上的数字分别是多少呢?
// 两个整数相除,结果得到的是整数。 int num = 1234; System.out.println(num % 10); // 4 System.out.println(num / 10 % 10); // 先除 10 得到结果 123 在取余 10 得到 3 System.out.println(num / 100 % 10); // 先除 100 得到结果 12 在取余 10 得到 2 System.out.println(num / 1000); // 最后这个直接除以 1000 得到 1
4.字符串 + 操作:
1)当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。
2)在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
// 先计算 1 + 2 = 3 ,两个是整数按相加计算 // 3 + " Hello World " ,整数和字符串相加,为字符串。 // 3 Hello World + 3 + 4 ,整数和字符串相加,为字符串。 // 3 Hello World 34 1 + 2 + " Hello World " + 3 + 4
1.2 自增自减运算
|
符号 |
作用 |
说明 |
|
++ |
自增 |
变量的值加1 |
|
-- |
自减 |
变量的值减1 |
1. ++ 和 ––
既可以放在变量的前边: ++a, --a
也可以放在变量的后边: a++, a--
2.使用区别
单独使用: ++/--自己独占一行,不和其它操作一起进行运算
前++和后++效果一样:都是让变量的值增加1 ++a 和 a++ 都是让变量a的值增加1
前--和后--效果一样:都是让变量的值减少1 --a和a--都是让变量a的值减少1
int a = 1 ,b =1; ++a; System.out.println("a = " + a); --a; System.out.println("a = " + a); b++; System.out.println("b = " + b); b--; System.out.println("b = " + b);
混合使用: ++/--和其它操作(赋值/打印输出)一起进行运算
++/--写在前面【先++/--,再使用】:
先把变量值增加1(++)或者减少1(--),然后把变量增加1(++)或者减少1(--)的结果进行其它运算
++/--写在后面【先使用,再++/--】:
先使用变量增加1(++)或者减少1(--)之前的数据,然后变量的值再增加1(++)或者减少1(--)
int b = 1; // 先打印 b的值 1, 在自增 System.out.println("b++ 值:" + b++); // 1 System.out.println("b值:" + b); // 2 // 先自增,在打印 b 的值 3 System.out.println("++b 值:" + ++b); //3 System.out.println("b 值:" + b);
2.赋值运算
1. 赋值运算符:
|
符号 |
作用 |
说明 |
|
= |
赋值 |
a=10,将10赋值给变量a |
|
+= |
加后赋值 |
a+=b,将a+b的值给a |
|
-= |
减后赋值 |
a-=b,将a-b的值给a |
|
*= |
乘后赋值 |
a*=b,将a×b的值给a |
|
/= |
除后赋值 |
a/=b,将a÷b的商给a |
|
%= |
取余后赋值 |
a%=b,将a÷b的余数给a |
//赋值: += -= *= /= %= int a1 = 10, b1 = 20, c1 = 30, d1 = 40; a1 += b1; System.out.println("a1 = " + a1); b1 /= c1; System.out.println("b1 = " + b1); c1 %= d1; System.out.println("c1 = " + c1); System.out.println("赋值运算-----");
3.关系运算符 ( 比较运算符 )
作用:用来比较两个数据之间的大小关系,结果是boolean类型的数据
特点:关系表达式不管多么复杂,或者多么简单,最终结果要么是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,判断a是否小于b,成立为true,不成立为false |
|
<= |
a<=b,判断a是否小于等于b,成立为true,不成立为false |
//关系运算: > >= < <= == != int a2 = 10, b2 = 20; System.out.println(a2 > b2); System.out.println(a2 >= b2); System.out.println(a2 < b2); System.out.println(a2 <= b2); System.out.println(a2 == b2); System.out.println(a2 != b2); System.out.println("关系运算-----");
4.逻辑运算
1.逻辑运算符:
|
符号 |
作用 |
说明 |
|
& |
逻辑与 |
a & b,a和b都是true,结果为true,否则为false |
|
| |
逻辑或 |
a | b,a和b都是false,结果为false,否则为true |
|
^ |
逻辑异或 |
a ^ b,a和b结果不同为true,相同为false |
|
! |
逻辑非 |
!a,结果和a的结果正好相反 |
|
&& |
短路与 |
作用和&相同,但是有短路效果 |
|
|| |
短路或 |
作用和|相同,但是有短路效果 |
//逻辑运算: & | ! ^ int a3 = 10, b3 = 20, c3 = 30; System.out.println(a3 > b3 & a3 > c3); System.out.println(a3 < b3 & a3 < c3); System.out.println(a3 > b3 & a3 < c3); System.out.println(a3 < b3 & a3 > c3); System.out.println("逻辑运算----- &"); System.out.println(a3 > b3 | a3 > c3); System.out.println(a3 < b3 | a3 < c3); System.out.println(a3 > b3 | a3 < c3); System.out.println(a3 < b3 | a3 > c3); System.out.println("逻辑运算----- |"); System.out.println(a3 > b3 ^ a3 > c3); System.out.println(a3 < b3 ^ a3 < c3); System.out.println(a3 > b3 ^ a3 < c3); System.out.println(a3 < b3 ^ a3 > c3); System.out.println("逻辑运算----- ^"); System.out.println(!(a3 > b3 & a3 > c3)); System.out.println(!(a3 < b3 & a3 < c3)); System.out.println(!(a3 > b3 & a3 < c3)); System.out.println(!(a3 < b3 & a3 > c3)); System.out.println("逻辑运算----- !");
2.短路与,短路或 和 逻辑与,逻辑或的区别:
逻辑与&:无论左边真假,右边都要执行。
短路与&&:如果左边为真,右边执行;如果左边为假,右边不执行。
逻辑或 | :无论左边真假,右边都要执行。
短路或 || :如果左边为假,右边执行;如果左边为真,右边不执行。
int a = 10, b = 20, c = 30, d = 40; // 逻辑与 不管成立不成立,两边都要执行,所以 a 结果为 11 System.out.println((2 > 3) & (++a > 10)); // 短路与 第一个条件为false,右边条件不执行,所以结果为 20 System.out.println((2 > 3) && (++b > 20)); System.out.println("a : " + a + " " + "b:" + b); // 逻辑或 不管成立不成立,两边都要执行,所以 c 结果为 31 System.out.println((2 < 3) | (++c > 30)); // 短路或 第一个条件为true,右边条件不执行,所以 d 结果为 40 System.out.println((2 < 3) || (++d > 40)); System.out.println("c : " + c + " " + "d:" + d);
3.运算符优先级
在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于

5.三元运算
格式一:数据类型 变量名称 = 布尔表达式1 ? 表达式2 : 表达式3;
格式二:数据类型 变量名称 = 布尔表达式1 ? 表达式2 : (布尔表达式1 ? 表达式2 : 表达式3);
格式三:数据类型 变量名称 = a >(布尔表达式1 ? 表达式2 : 表达式3) ? 表达式2 : (布尔表达式1 ? 表达式2 : 表达式3);
执行流程:
(1)计算布尔表达式1的结果,看是true,还是false
(2)如果布尔表达式1的结果是true,取表达式2的结果赋值给左侧的变量
(3)如果布尔表达式1的结果是false,取表达式3的结果赋值给左侧的变量

例:有三个数字,计算最大值。a = 10 ,b = 20 , c = 30 。
// 三元运算: int a = 10, b = 20, c = 30; //int max = a > (b>c?b:c) ? a : (b>c?b:c); int max = a > (b>c?b:c) ? a : (b>c?b:c); System.out.println("max = " + max);
6.键盘输入
数据输出: 把程序的运行结果输出到控制台,从而显示到屏幕上
数据输入: 获取键盘录入的数据到程序中,从而在程序中对数据进行相关的运算
1. 实现键盘录入的三个步骤?
1)导包
import java.util.Scanner;
2)创建对象
Scanner sc = new Scanner(System.in);
3)接收数据
int a1 = sc.nextInt();
import java.util.Scanner; //导包 public class LuRu { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //创建对象 System.out.print("输入第一个整数:"); int a1 = sc.nextInt(); // 接收数据 System.out.print("输入第二个整数:"); int a2 = sc.nextInt(); System.out.print("输入第三个整数:"); int a3 = sc.nextInt(); int temp = a1 > a2 ? a1 : a2; int max = temp > a3 ? temp : a3; System.out.println("最大值是:" + max); } }
7.类型转换
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
举例:
int + int: 类型一直,可以直接计算
int + long: 类型不一致,不可以直接计算
解决方案一:
int + long --> long + long : 转换后类型一直,可以直接计算
把int类型转换成long类型,从小到大,叫做自动类型转换(自动完成)
解决方案二:
int + long --> int + int: 转换后类型一直,可以直接计算
把long类型转换成int类型,从大到小,叫做强制类型转换(不会自动完成,必须手动处理)
1.自动类型转换概念:
取值范围小的数据/变量,可以直接赋值给取值范围大的变量。
特点:
(1)是自动完成的,不需要代码的特殊处理
(2)byte/short/char类型计算时会自动转换为int类型计算。
(3)转换规则: byte、short、char-->int-->long-->float-->double
总结:整个表达式中的所有类型,都会自动转换成表达式中最大的类型,结果也是最大的类型
public static void main(String[] args) { int i = 1; byte b = 2; /* b是byte类型(占1个字节),i是int类型(占4个字节),类型不一致, 会发生自动类型转换,把byte类型的b,转换成int类型(左侧补充3个字节的0) byte + int --> int + int --> int 结果为int类型(占4个字节),不能直接赋值给左侧byte类型(占1个字节)的变量 */ // byte x = b + i; //报错 /* b是byte类型(占1个字节),i是int类型(占4个字节),类型不一致, 会发生自动类型转换,把byte类型的b,转换成int类型(左侧补充3个字节的0) byte类型的b的2: 00000010 int类型的b的2: 00000000 00000000 00000000 00000010 byte + int --> int + int --> int 结果为int类型(占4个字节),可以直接赋值给左侧int类型(占4个字节)的变量 */ int y = b + i; System.out.println(y); }
2.强制类型转换:
强制类型转换概念:取值范围大的数据或者变量,不能直接赋值给取值范围小的变量,必须进行强制类型转换
格式:转后类型 变量名称 = (转后类型)转前数字 或 变量;
问题:可能损失精度
例子:
public class zuoye { public static void main(String[] args) { int a = 2345; /* 正常: int类型(4个字节)强制类型转换成short类型 十进制 2345: 对应的二进制是 00000000 00000000 00001001 00101001 砍掉左侧的2个字节的内容,目前砍掉都是0,对数据大小没有影响 00001001 00101001 // 2345 */ short s = (short) a; System.out.println(s); /* 有问题: int类型(4个字节)强制类型转换成byte类型。 十进制 2345: 对应的二进制是 00000000 00000000 00001001 00101001 砍掉左侧的3个字节的内容,砍掉的有1,就会影响数据大小 00101001 // 41 */ byte b = (byte) a; System.out.println(b); } }
8.ASCII码表
计算机是一个二货,只能存储0和1,所以存储到计算机中的所有内容都会转换成0和1进行存储,所以我们在计算机中存储的字符也不例外,也需要把字符转换成0和1进行存储
编码表:就是将人类的文字和一个十进制数进行对应起来组成一张表格。
存储字符时:需要查找ASC码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中
使用字符时:将对应的二进制数转换为十进制 找到ASC表中对应的字符 显示出来

9.int类型和char类型的运算原理
char类型和int类型不一致,会发生自动类型转换
byte/short/char类型,会自动类型转换为int类型
如何把char类型自动转换成int类型,查看ASCII码表。
例 : 'a' 对应 ASXCII表的十进制为 97 。转换成int类型后 'a' 就变成 97
public class zuoye { public static void main(String[] args) { char c = 'a'; System.out.println(c); // 'a' + 1 后就是 98 System.out.println("c = " + (c + 1)); // c + 1 是 99 ,转换成 char 后为 b System.out.println((char)(c + 1));//b } }

浙公网安备 33010602011771号