1.运算符和表达式运算符:是对常量或变量进行运算的符号。例如:+-*/表达式:使用运算符连接常量或变量,符合Java语法的公式就是表达式。例如:a+b是一个整体的表达式。而+是一种算术运算符,所以这个表达式也叫算术表达式。2、算术运算符分类:+-*/%运算特点:+-*:和小学数学完全一样。/:1.整数相除的结果只能被整除。如果结果想是小数,它必须有Decimal参数。2.小??数直接参与计算,得出的结果可能不准确。案例:System.out.println(10/3);//3System.out.println(10.0/3);//3.3333333333333335%:取模求余。他做的也是除法运算,得到的却是余数。案例:System.out.println(10%2);//0System.out.println(10%3);//1应用场景://可以用模来判断一个数是奇数还是偶数System.out.println(15%2);//1奇数练习:取值拆分要求:用键盘输入一个三位数,拆分成个位、十位、百位,在控制台打印代码示例://1.键盘输入一个三位数字//引包---创建对象---接收数据Scannersc=newScanner(System.in);System.out.println("请输入一个三位数字");intnumber=sc.nextInt();//123//2.获取三位数的个位、十位、百位并打印出来//公式://对于任意数//个位:Number%10intones=number%10;//十位:Number/10%10inttens=number/10%10;//百位:Number/100%10intbundles=number/100%10;//输出结果System.out.println(ones);System.out.println(tens);System.out.println(hundreds);公式:获取任意数的每一位。个位:数%10十位:数/10%10百位:数/100%10千位:数/1000%10。.等等。..3.隐式转换的概念:也叫自动类型提升。就是把一个取值范围小的数据或变量赋值给另一个取值范围大的变量。这个时候我们不需要另外写代码单独实现,程序会自动帮我们完成。简单记忆:就是把小的给大的,可以直接给。提升规则有两种:一种是取值范围小的,一种是取值范围大的。小的会先升为大的,然后再进行运算。byte、short、char这三种数据在运算前会直接提升为int。取值范围从小到大:byteshortintlongfloatdouble4。隐式转换的做法请看下面的case有没有报错。如果有问题,请说出原因。如果没有问题,请说出运行过程和运行结果案例一:doubled=10;System.out.println(d);//10.0解释:10为整数,整数默认为int类型。并按照取值范围的顺序:byteshortintlongfloatdouble赋值时,一个int类型被分配给一个double类型。将一个小的分配给一个大的很简单。情况2:字节b=100;inti=b;//可以赋值成功说明:因为byte的取值范围小,而int的取值范围大,隐式转换是在底层进行的,不需要我们另外写代码单独实现,可以直接赋值。情况3:inti=10;长n=20L;???结果=i+n;变量结果是什么类型?说明:变量i是int类型,变量n是long类型。按取值范围排序:byteshortintlongfloatdouble变量i中的值会自动提升为long类型,最后result其实就是两个long相加,所以最后的结果是long类型。情况4:inti=10;长n=100L;双d=20.0;???结果=i+n+d;变量结果是什么类型?解释:变量i是int类型,变量n是long类型,变量d是double类型。并且按照取值范围的顺序:byteshortintlongfloatdouble所以当变量i中的值和变量n参与运算,类型会提升,变成double。最后其实就是三个double的相加,最后的结果是double类型。情况5:字节b1=10;字节b2=20;???result=b1+b2;//int问变量result是什么类型?解释:因为b1和b2都是byte类型。因此,在参与计算时,变量b1和变量b2中的值会自动提升为int类型。最后其实就是两个int类型相加,最后的结果也是int类型。情况6:字节b=10;短s=20;长n=100L;???结果=b+s+n;变量结果是什么类型?long解释:变量b是byte类型,变量s是short类型,变量n是long类型。当byte、short、char类型的变量参与运算时,变量中的值会被直接提升为诠释第一。第一步:将变量b和变量s中的值提升为int参与运算。int+int+long第二步:long类型的取值范围大于int的取值范围。所以变量b和变量s中的值会再次被提升为long。long+long+long。所以最后的结果是long类型的。5.强制转换的概念:如果要将一个取值范围大的数据或变量赋值给另一个取值范围小的变量。不允许直接操作。如果一定要这样做,需要加上强制转换。书写格式:目标数据类型变量名=(目标数据类型)要转换的数据;简单理解:转换成什么类型??,那就把类型写在括号里就行了。案例:publicclassOperatorDemo2{publicstaticvoidmain(String[]args){doublea=12.3;整数b=(整数)a;System.out.println(b);//12}}注意事项:强制转换可能会出现数据错误。(丢失数据的精度)6.字符串的+操作核心技巧:+操作中出现一个字符串时,此时是该字符串的连接符,会拼接前后数据并生成一个新字符串。连续执行+操作时,从左到右逐一执行。7、字符串相加练习:案例一:1+"abc"+1结果:"1abc1"解释:第一步:1+"abc"。这个过程中,涉及到字符串,所以做的是拼接操作,生成一个新的字符串“1abc”第二步:“1abc”+1。这个过程中,涉及到字符串,所以做的也是一个拼接操作生成新字符串“1abc1”情况2:1+2+“abc”+2+1结果:“3abc21”解释:第一步:1+2。在这个过程中,没有涉及到字符串,所以进行了加法运算,结果为3。第二步:3+"abc"。在这个过程中,涉及到字符串,所以做的是拼接操作生成新的字符串“3abc”。第三步:“3abc”+2。在这个过程中,涉及到字符串,所以做拼接操作生成新的字符串"3abc2"。Step4:"3abc2"+1.这个过程中涉及到字符串,所以进行拼接操作,生成新的字符串"3abc21"案例三:字符串名称="Heimerdinger";System.out.println("我的名字是"+name);结果:我的名字叫黑默丁格解释:当一个字符串被添加到一个变量中时,它实际上是与变量中的值进行拼接。8.字符+运算规则:当+运算中出现一个字符时,会将该字符取到计算机内置的ASCII码表中查询对应的数字,然后进行计算。大小写:charc='a';int结果=c+0;System.out.println(result);//97ASCII码表:'a'-----97'A'-----659.算术运算符汇总分类:+-*/%这些运算都差不多和小学数学完全一样。注意:/和%的区别:都是进行除法运算,/取结果的商。%取结果的余数。整数运算只能得到整数。要想得到小数,就必须有浮点数参与运算。算术运算符高级用法:以+为例进行讲解,其他减法、乘法、除法的运算规则也相同。特例:String只有+操作,没有其他操作。10、自增自减运算符的分类:++自增运算符--自减运算符++:就是把变量中的值加+1--:就是把值放到variable-1使用方法:放在variable前面,我们先称它为++。例如:++a放在变量后面,我们在++后面调用它。例如:a++注意:是++在前还是++在后。当写在单行时,运算结果是完全一样的。case://++inta=10;a++;//就是让变量a中的值+1System.out.println(a);//11++a;//就是让变量a中的值+1System.out.println(a);//12自增自减运算符的应用场景:在某些情况下,当一个变量需要自增或自减1时使用,比如生日大一岁,使用自增运算符。例如:在商场中,选择商品的数量也使用自增或自减运算符。比如:要统计很多数据,有多少数据符合要求,也用到自增运算符。11、最常用的赋值运算符:=运算过程:将等号右边的结果赋值给左边的变量案例:publicclassOperatorDemo6{publicstaticvoidmain(String[]args){//1.最简单的赋值运算符用法inta=10;//就是把10赋值给变量aSystem.out.println(a);//2。如果等号右边需要计算。整数b=20;intc=a+b;//先计算等号右边,并将计算结果赋值给左边变量System.out.println(c);//3。特殊用法a=a+10;//先计算等号右边,并将计算结果赋值给左边的变量System.out.println(a);//20}}12.扩展赋值运算符分类:+=、-=、*=、/=、%=运算规则:是对左边和右边进行运算,最后的结果赋值给左边,对后面没有影响右侧。case:publicclassOperatorDemo7{publicstaticvoidmain(String[]args){//扩展赋值运算符inta=10;整数b=20;a+=b;//左右相加,然后相加,最后的结果赋值给左边,对右边没有影响//等价于a=a+b;System.out.println(a);//30System.out.println(b);//20}}注:扩展赋值运算符中的隐藏层也包含了一个cast。以+=为例。一个+=乙;实际上相当于a=(byte)(a+b);publicclassOperatorDemo8{publicstaticvoidmain(String[]args){bytea=10;字节b=20;//a+=b;a=(byte)(a+b);System.out.println(a);//30}}13.关系运算符也称为比较运算符。分类:符号解释==是判断左边是否等于右边,如果为真则为真,如果不为真则为假!,为真则为真,不为真则为假>=是判断左边是否大于等于右边,如果为真则为真,如果为不为真则为假<=是判断左边是否小于右边,为真则为真,不为真则为假<=是判断左边是否小于右边小于等于右边,为真则为真,不为真则为假注意:关系运算符最后的结果必须是布尔型。要么是真要么是假当写==时,永远不要写=14。逻辑运算符&和|的使用:&:LogicalAND(and)两边都为真,则结果为真,只要有一个为假,则结果为假。|:逻辑或(或)两边都为假,结果为假,只要有一个为真,则结果为真。代码示例://&//两边都为真,结果为真。System.out.println(true&true);//trueSystem.out.println(false&false);//falseSystem.out.println(true&false);//falseSystem.out.println(false&true);//falseSystem.out.println("====================================");//|or//两边都是假,则结果为假,如果一方为真,则结果为真。System.out.println(true|true);//trueSystem.out.println(false|false);//falseSystem.out.println(true|false);//trueSystem.out.println(false|true);//真实使用场景:根据固定场景,选择使用&或者|用户登录。用户名输入正确&密码输入正确因为只有用户名和密码同时正确,才能登录成功,只要其中一个失败即可。使用技巧:当我们需要同时满足左右两个条件时,可以使用和婆婆选择女婿,婆婆:son-in-law,你要么买房要么买车。然后我就可以穿我的小棉袄了。买房子|买车,只要满足两个条件之一,就可以穿上棉袄。使用技巧:当两个条件只有一个满足时,可以用或^(XOR):以后用的不多,学习一下。计算规则:如果两边相同,则结果为假;两边不同则结果为真代码示例://^//左右不同则结果为真,左右相同则结果为假System.out.println(真^真);//falseSystem.out.println(false^false);//falseSystem.out.println(true^false);//trueSystem.out.println(false^true);//真!(negation)use:是否定,亦称否定。计算规则:false的否定为true,true的否定为false温馨提示:否定最多只能用一个。代码示例:System.out.println(!false);//trueSystem.out.println(!true);//falseSystem.out.println(!!false);//注意:最多只用一次反转。15、短路逻辑运算符的分类:&&||&&:运算结果与&完全一样,只是有短路作用。||:运算结果与|一模一样。这只是一个短路。逻辑核心:当左边不能确定整个表达式的结果时,执行右边。当左边可以确定整个表达式的结果时,不执行右边。从而提高代码的运行效率。示例:用户登录案例用户名正确&密码正确如果使用&,无论用户名是否正确,都会验证密码。思考:如果用户名输入正确,那么我们判断密码是否正确是符合业务逻辑的。但是如果用户名输入错误,现在是否需要比对密码呢?没有了。如果使用&,不管什么情况都会执行左右。用户名正确&&密码正确如果用户名输入正确,则验证密码是否输入正确。如果用户名输入错误,则无需验证密码是否正确,最终结果直接为false。从而提高程序运行的效率。婆婆选择女婿有房|天天要闻有车先看看有没有房子,找到了再去看看有没有车。心想:既然有房,何必去看车呢?没必要。有房子||有车先看看有没有房子。如果有,那么右边就不会被执行。最后的结果直接为真。如果没有房子,你就去看看右边有没有车。总结:&&和&,||的结果和|是完全一样的。但是将逻辑运算符短路可以提高程序的效率。建议:最常用:&&||!16、三元运算符又叫:三元表达式或问号冒号表达式。格式:关系表达式?表达式1:表达式2;计算规则:计算关系表达式的值。如果关系表达式的计算结果为真,则执行expression1。如果关系表达式的计算结果为假,则执行表达式2。注意:必须使用三元运算符的最终结果,要么赋值给一个变量,要么直接打印出来。案例:publicclassOperatorDemo12{publicstaticvoidmain(String[]args){//需求:求两个数中较大的值inta=10;整数b=20;//格式:关系表达式?表达式1:表达式2;//注意://必须使用三元运算符的最终结果。//要么赋值给一个变量,要么直接输出。整数最大值=a>b?一个:乙;System.out.println(max);System.out.println(a>b?a:b);}}17.Exercise1-TwoTigers要求:动物园里有两只老虎,通过键盘输入得到两只老虎的权重。请用程序判断两只老虎的体重是否相同。代码示例://1。获取两只老虎的重量Scannersc=newScanner(System.in);System.out.println("请输入第一只老虎的体重");intweight1=sc.nextInt();System.out.println("请输入第二只老虎的体重");intweight2=sc.nextInt();//2.使用三元运算符得到最终结果Stringresult=weight1==weight2?“一样”:“不一样”;System.out.println(result);18.Exercise2-Findthemaximumofthreenumbers要求:寺庙里住着三个和尚,已知他们的身高分别是150cm、210cm、165cm。请用程序求出三个和尚的最高身高。代码示例://1。定义三个变量记录和尚的身高intheight1=150;intheight2=210;intheight3=165;//2。使用三元运算符查找两个数字中的较大值。inttemp=height1>height2?height1:height2;//3.求最终结果intmax=temp>height3?温度:高度3;System.out.println(max);19、运算符的优先级在Java中涉及的运算符很多,每个运算符都有自己的优先级。但这些优先事项不需要记忆。我们只需要知道一件事:括号优先于所有。
