day04-运算符

发布时间:2026/7/17 6:45:32
day04-运算符 运算符就是对常量或者变量进行操作的符号。比如 - * /表达式用运算符把常量或者变量连接起来的符合Java语法的式子。比如a b 就是表达式。​ 而其中是算术运算符的一种所以这个表达式也称之为算术表达式。4.1 算术运算符包括加、减、乘、除、取模取余 - * / %注快捷输入sout 回车生成 System.out.println();快捷输入psvm 回车生成 public static void main(String[] args) { }在代码中如果有小数参与计算结果有可能不精确。/* 1.整数相除结果只能得到整除如果结果想要是小数必须要有小数参数。 2.小数直接参与运算得到的结果有可能是不精确的。 */ 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 //应用场景可以利用取模来判断一个数是奇数还是偶数 System.out.println(15 % 2);//1 奇数练习数值拆分需求键盘录入一个三位数将其拆分为个位、十位、百位后打印在控制台代码示例//1.键盘录入一个三位数 //导包 --- 创建对象 --- 接收数据 Scanner sc new Scanner(System.in); System.out.println(请输入一个三位数); int number sc.nextInt();//123 //2.获取这个三位数的个位、十位、百位并打印出来 //公式 //针对于任意的一个数而言 //个位 数字 % 10 int ones number % 10; //十位 数字 / 10 % 10 int tens number / 10 % 10; //百位 数字 / 100 % 10 int hundreds number / 100 % 10; //输出结果 System.out.println(ones); System.out.println(tens); System.out.println(hundreds);操作的三种情况①数字相加隐式转换、强制转换(见4.8 4.9)②字符串相加当“”操作中出现字符串时这个“”是字符串连接符而不是算术运算符了。会将前后的数据进行拼接并产生一个新的字符串。字符串只有加操作没有-*/规则当操作中出现字符串时此时就是字符串的连接符会将前后的数据进行拼接并产生一个新的字符串。当连续进行操作时从左到右逐个执行的。注意​连续进行“”操作时从左到右逐个执行。例199“年黑马” 结果为 “100年黑马”案例11 abc 1结果1abc1解释​ 第一步 1 abc。在这个过程中有字符串参与的所以做的是拼接操作产生一个新的字符串1abc​ 第二步 1abc 1。这个过程中有字符串参与的所以做的也是拼接操作产生一个新的字符串1abc1案例21 2 abc 2 1结果“3abc21”解释​ 第一步1 2 。在这个过程中没有字符串参与的所以做的是加法运算结果为3。​ 第二步3 abc。在这个过程中有字符串参与的所以做的是拼接操作产生一个新的字符串3abc。​ 第三步3abc 2。在这个过程中有字符串参与的所以做的是拼接操作产生一个新的字符串3abc2。​ 第四步3abc2 1。在这个过程中有字符串参与的所以做的是拼接操作产生一个新的字符串“3abc21”案例3String name 黑默丁格; System.out.println(我的名字是 name);结果 我的名字是黑默丁格解释当字符串跟变量相加的时候实际上是跟变量里面的值进行拼接。③字符相加byte short char三种类型的数据在运算的时候都会直接先提升为int然后再进行运算。当字符字符或字符数字时会把字符通过ASCII码表查询到对应的数字再进行计算。规则当操作中出现了字符会拿着字符到计算机内置的ASCII码表中去查对应的数字然后再进行计算。案例char c a; int result c 0; System.out.println(result);//97ASCII码表中​ a ----- 97​ A ----- 654.2 自增自减运算符分类 自增运算符 -- 自减运算符就是把变量里面的值1--就是把变量里面的值-1使用方式放在变量的前面我们叫做先。 比如a放在变量的后面我们叫做后。 比如a注意点​ 不管是先还是后。单独写在一行的时候运算结果是一模一样的。案例// int a 10; a;//就是让变量a里面的值 1 System.out.println(a);//11 a;//就是让变量a里面的值 1 System.out.println(a);//12 int a10; int ba;//先用后加 int ba;//先加后用练习public static void main(String[] args){ int x10; int yx;//后 先用后加 int zx;//先 先加后用 System.out.println(x:x);//12 System.out.println(y:y);//10 System.out.println(z:z );//12 }4.3 赋值运算符最为常用的 运算过程就是把等号右边的结果赋值给左边的变量案例public class OperatorDemo6 { public static void main(String[] args) { //1.最为简单的赋值运算符用法 int a 10;//就是把10赋值给变量a System.out.println(a); //2.如果等号右边需要进行计算。 int b 20; int c a b;//先计算等号右边的把计算的结果赋值给左边的变量 System.out.println(c); //3.特殊的用法 a a 10;//先计算等号右边的把计算的结果赋值给左边的变量 System.out.println(a);//20 } }扩展赋值运算符分类​ 、-、*、/、%运算规则​ 就是把左边跟右边进行运算把最终的结果赋值给左边对右边没有任何影响。案例public class OperatorDemo7 { public static void main(String[] args) { //扩展赋值运算符 int a 10; int b 20; a b;//把左边和右边相加再把最终的结果赋值给左边对右边没有任何影响 // 相当于 a a b; System.out.println(a);//30 System.out.println(b);//20 } }注意扩展的赋值运算符隐含了强制类型转换。以为例。a b ;实际上相当于 a (byte)(a b);public class OperatorDemo8 { public static void main(String[] args) { byte a 10; byte b 20; a b; //相当于a (byte)(a b);运算时,a、b隐式转换为int类型.赋值时,强制转换为byte System.out.println(a);//30 } }4.4 关系运算符又叫比较运算符其实就是拿着左边跟右边进行了判断而已。分类符号解释就是判断左边跟右边是否相等如果成立就是true如果不成立就是false!就是判断左边跟右边是否不相等如果成立就是true如果不成立就是false就是判断左边是否大于右边如果成立就是true如果不成立就是false就是判断左边是否大于等于右边如果成立就是true如果不成立就是false就是判断左边是否小于右边如果成立就是true如果不成立就是false就是判断左边是否小于等于右边如果成立就是true如果不成立就是false注意点关系运算符最终的结果一定是布尔类型的。要么是true要么是false在写的时候千万不要写成案例public static void main(String[] args){ int a10; int b10; int c20; System.out.println(ab);//true System.out.println(ac);//false }/*键盘输入两个整数表示你和你约会对象衣服的时髦度。如果你的时髦程度大于你对象的时髦程度相亲就成功。输出true否则输出false。*/ public static void main(String[] args){ Scanner scnew Scanner(System.in); System.out.println(请输入我们自己的衣服时髦度); int myFashion sc.nextInt(); System.out.println(请输入相亲对象的衣服时髦度); int girlFashion sc.nextInt(); boolean resmyFashion girlFashion; System.out.println(res); }4.5 逻辑运算符1. 和 | 的使用逻辑与而且​ 两边都为真结果才是真只要有一个为假那么结果就是假。|逻辑或或者​ 两边都为假结果才是假只要有一个为真那么结果就是真。代码示例// //两边都是真结果才是真。 System.out.println(true true);//true System.out.println(false false);//false System.out.println(true false);//false System.out.println(false true);//false System.out.println(); // | 或 //两边都是假结果才是假如果有一个为真那么结果就是真。 System.out.println(true | true);//true System.out.println(false | false);//false System.out.println(true | false);//true System.out.println(false | true);//true使用场景​ 根据固定的场景来选择使用还是使用|用户登录。用户名输入正确 密码输入正确因为只有用户名和密码同时都正确了那么才能成功登录只要有一个失败了都不行。使用技巧当我们需要同时满足左边和右边两种情况时可以使用且丈母娘选女婿丈母娘女婿啊你要么买个房子要么买辆车。就可以把我的小棉袄穿走了。买个房子 | 买辆车两个条件中只要满足其中一个就可以穿走小棉袄了。使用技巧当两种条件只要满足其中一个的时候可以使用或2. ^异或的使用​计算规则如果两边相同结果为false如果两边不同结果为true代码示例//^ //左右不相同结果才是true左右相同结果就是false System.out.println(true ^ true);//false System.out.println(false ^ false);//false System.out.println(true ^ false);//true System.out.println(false ^ true);//true3. !取反的使用​ 是取反也叫做非。计算规则false取反就是truetrue取反就是false温馨提示取反最多只用一个。代码示例System.out.println(!false);//true System.out.println(!true);//false System.out.println(!!false);//注意点取反最多只用一个。4. 短路逻辑运算符短路与运算结果跟是一模一样的只不过具有短路效果。||短路或运算结果跟|是一模一样的。只不过具有短路效果。逻辑核心​ 当左边不能确定整个表达式的结果右边才会执行。​当左边能确定整个表达式的结果那么右边就不会执行了。从而提高了代码的运行效率。举例用户登录案例用户名正确 密码正确如果使用一个不管用户名是否正确都会去验证密码。​但是如果用户名输入错误了那么现在还有必要去比较密码吗没有必要了。​用户名正确 密码正确​ 如果用户名输入正确了那么才会验证密码是否输入正确。​ 如果用户名输入错误了那么就不会再去验证密码是否正确最终的结果直接为false。从而提高了程序运行的效率。丈母娘选女婿有房 | 有车首先先看看有没有房发现有然后再去看看有没有车。​既然都有房子干嘛还要去看车呢多此一举。​有房 || 有车​ 首先先看看有没有房如果有那么右边就不执行了。最终的结果直接为true。​ 如果没有房子才会去看右边有没有车。​最为常用 || 4.6 三元运算符又叫做三元表达式或者问号冒号表达式。格式​ 关系表达式 表达式1 表达式2 计算规则计算关系表达式的值。如果关系表达式的值为真那么执行表达式1。如果关系表达式的值为假那么执行表达式2。注意点​ 三元运算符的最终结果一定要被使用要么赋值给一个变量要么直接打印出来。案例public class OperatorDemo12 { public static void main(String[] args) { //需求求两个数的较大值 int a 10; int b 20; //三元运算符的最终结果一定要被使用。 //要么赋值给一个变量要么直接输出。 int max a b ? a : b ; System.out.println(max); System.out.println(a b ? a : b); } }练习1-两只老虎​ 动物园里有两只老虎两只老虎的体重分别为通过键盘录入获得​ 请用程序实现判断两只老虎的体重是否相同。代码示例//1.获取两只老虎的体重 Scanner sc new Scanner(System.in); System.out.println(请输入第一只老虎的体重); int weight1 sc.nextInt(); System.out.println(请输入第二只老虎的体重); int weight2 sc.nextInt(); //2.利用三元运算符求出最终结果 String result weight1 weight2 ? 相同 : 不相同; System.out.println(result);练习2-求三个数的最大值​ 一座寺庙里住着三个和尚已知他们的身高分别为150cm、210cm、165cm。​ 请用程序实现获取这三个和尚的最高身高。代码示例//1.定义三个变量记录和尚的身高 int height1 150; int height2 210; int height3 165; //2.利用三元运算符求出两个数中的较大值。 int temp height1 height2 ? height1 : height2; //3.求出最终的结果 int max temp height3 ? temp : height3; System.out.println(max); //Ctrl Alt l 自动格式化代码4.7 运算符的优先级在Java中涉及了很多的运算符每一种运算符都有各自的优先级。但是这些优先级不需要记忆。咱们只要知道其中一点小括号优先于所有。4.8 隐式转换概念​ 也叫自动类型提升。​ 就是把一个取值范围小的数据或者变量赋值给另一个取值范围大的变量。此时不需要我们额外写代码单独实现是程序自动帮我们完成的。简单记忆​ 就是小的给大的可以直接给。两种提升规则取值范围小的和取值范围大的进行运算小的会先提升为大的再进行运算。byte、short、char三种类型的数据在运算的时候都会直接先提升为int然后再进行运算。取值范围从小到大的关系​byte short int long float double什么时候转换数据类型不一样不能进行计算需要转成一样的才可以进行计算。隐式转换的练习请看下面案例是否有误如果有问题请说出原因如果没有问题请说出运算过程和运算结果案例一int i 10; long n 100L; double d 20.0; ??? result i n d; 问变量result是什么类型的解释​ 变量i是int类型变量n是long类型变量d是double类型。​ 而在取值范围的顺序中byte short int long float double​ 所以变量i和变量n里面的值在参与运算的时候都会进行类型提升变成double。​ 最终其实就是三个double进行相加那么最终的结果就是double类型的。案例二byte b 10; short s 20; long n 100L; ??? result b s n; 问变量result是什么类型的long解释​ 变量b是byte类型的变量s是short类型的变量n是long类型的。​ byteshortchar类型的变量在参与运算的时候变量里面的值会直接先提升为int。第一步变量b和变量s里面的值会先提升为int参与运算。​ int int long第二步而long类型的取值范围是大于int的取值范围的。​ 所以变量b和变量s里面的值会再次提升为long。​ long long long。所以最终结果是long类型的。4.9 强制转换概念​ 如果要把一个取值范围大的数据或者变量赋值给另一个取值范围小的变量。是不允许直接操作。​ 如果一定要这么干就需要加入强制转换。书写格式​ 目标数据类型 变量名 目标数据类型被强转的数据简单理解​ 要转成什么类型的那么就在小括号中写什么类型就可以了。案例一public class OperatorDemo2 { public static void main(String[] args) { double a 12.3; int b (int) a; System.out.println(b);//12 } }案例二public static void main(String[] args){ byte b110; byte b220; //b1和b2自动转为int类型,需要强制转换才能变为byte类型 byte res(byte)(b1b2); System.out.println(res); }注意点​ 强制转换有可能会导致数据发生错误。数据的精度丢失补充原码反码补码原码十进制数据的二进制表现形式最左边是符号位0为正1为负为了解决原码不能计算负数的问题而出现反码反码正数的反码不变负数的反码在原码的基础上符号位不变数值取反0变1,1变0为了解决负数计算时跨0的问题而出现补码补码正数的补码不变负数的补码在反码的基础上加1计算机中的存储和计算都是以补码的形式进行的。另外补码还多记录一个特殊的值-128。