当前位置: 代码迷 >> 综合 >> JAVA语言语法_运算符(part2)
  详细解决方案

JAVA语言语法_运算符(part2)

热度:38   发布时间:2023-12-22 06:47:29.0

文章目录

      • JAVA语言语法
        • 二、运算符
          • 1、JAVA中的运算符概述
          • 2、算术运算符&除法、取余
          • 3、算术运算符&加号
          • 4、算术运算符&自增
          • 5、赋值运算符
          • 6、算术运算符练习题
          • 7、比较运算符
          • 8、逻辑运算符
          • 10、三元运算符
          • 11、位运算符(了解)
          • 12、运算符&总结
          • 13、运算符的优先级别(了解)

JAVA语言语法

二、运算符
1、JAVA中的运算符概述

? 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

在这里插入图片描述

2、算术运算符&除法、取余

? 算术运算符:

在这里插入图片描述

? 除法、取余:

package com.rucoding.d4;
/*** @author LiuYiXin* 算术运算符: + - * / % 前 ++ 后++ ,前-- 后--*/
public class SuanShuDemo01 {
    public static void main(String[] args) {
    // / % 前 ++ 后++ ,前-- 后--//①.除号 /int num1 = 12;int num2 = 5;int result1 = num1 / num2;
// System.out.println(result1); //2 ,int为整型,截断操作int result2 = num1 / num2 * num2;
// System.out.println(result2); //10double result3 = num1 / num2; //int类型运算,还是int整型
// System.out.println(result3);double result4 = num1 / num2 + 0.0; //2.0,此时是先进行除法运算double result5 = num1 / (num2 + 0.0); //括号内提升为double类型,运算结果自然是double类型,2.4double result6 = (double)(num1 / num2); //2.0double result7 = (double)num1 / num2; //2.4double result8 = num1 / (double)num2; //2.4//②. 取余运算//使用场景: 开发中,经常使用取模%来判断能否被除尽的情况。//结果的符号与被模数的符号相同int m1 = 12;int n1 = 5;System.out.println("被模数m1 取模% n1 =" + (m1 % n1));int m2 = -12;int n2 = 5;System.out.println("被模数m2 取模% n2 =" + (m2 % n2));int m3 = 12;int n3 = -5;System.out.println("被模数m3 取模% n3 =" + (m3 % n3));int m4 = -12;int n4 = -5;System.out.println("被模数m4 取模% n4 =" + (m4 % n4));}
}
3、算术运算符&加号

? 加号应用场景:

? (1)、表示正数,+5 即是 5;

? (2)、相加操作:数学加法运算,例如 5 + 6;

? (3)、字符串的拼接: +左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串。

? 知识点1: 大小写字母和数字的ASCII码值: a-z:97-122,A-Z:65-90,0-9:48-57。(记住吧)

代码演示:

package com.rucoding.d4;
/*** @author LiuYiXin**/
public class SuanShuAddDemo01 {
    public static void main(String[] args) {
    //算术运算符的加号//①.表示正数System.out.println(+5);//②.相加操作System.out.println(5 + 6);System.out.println(5 + '6'); //单引号字符,此时加号是运算操作,'6'会被转义为54 ,结果为59//温馨提示: 大小写字母和数字的ASCII码值:a-z:97-122,A-Z:65-90,0-9:48-57。(记住吧)//③.字符串的拼接: +左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串int num = 56;System.out.println("num = " + num); //"num =56" ==> num = 56System.out.println(5 + 6 + "7"); //117System.out.println(5 + '6' + "7"); //597System.out.println("5" + 6 + "7");//567System.out.println("5" + '6' + "7");//567System.out.println("5"+ '6' + '7');//567System.out.println('5'+ '6' + '7');//162}
}
4、算术运算符&自增
(前) ++ : 先自增1,后进行运算
(后) -- : 先进行运算,后自增1
(前) -- : 先自减1,后进行运算
(后) -- : 先进行运算,后自减1记住点:自增1不会改变本身变量的数据类型!
package com.rucoding.d4;
/*** @author LiuYiXin**/
public class SeflAddDemo01 {
    public static void main(String[] args) {
    //(前) ++ : 先自增1,后进行运算//(后) -- : 先进行运算,后自增1int a1 = 10;int b1 = ++a1; //前++ 先拿自增+的结果 为11System.out.println("a1 = " + a1 + ",b1 = " + b1); //11,11int a2 = 10;int b2 = a2++; //后++ System.out.println("a2 = " + a2 + ",b2 = " + b2); //11,10int a3 = 10;++a3; //a3++;int b3 = a3;System.out.println("b3 = " + b3);//划重点了short s1 = 10;
// s1 = s1 + 1; //编译不通过, 1默认的类型int类型,自动提升为ints1 =(short)(s1 + 1);//Change type of 's1' to 'int' 或者 Add case to 'short'(这里选择的)s1++; //自增1不会改变本身变量的数据类型哦!!!System.out.println("s1 = " + s1);//引申byte bb1 = 127;bb1++;System.out.println("bb1 = " + bb1); //-128//(前) -- : 先自减1,后进行运算//(后) -- : 先进行运算,后自减1int a4 = 10;int b4 = a4--;//int b4 = --a4System.out.println("a4 = " + a4 + ",b4 = " + b4); //9,10}
}
5、赋值运算符
赋值运算符:=  +=  -=  *=  /=  %=

代码演示:

package com.rucoding.d4;
/*** @author LiuYiXin* 赋值运算符: = += -= *= /= %= */
public class SetValueDemo01 {
    //赋值运算符 public static void main(String[] args) {
    //赋值符号, =int i1 = 10;int j1 = 10;int i2,j2;//连续赋值i2 = j2 = 10;int i3 = 10 , j3 = 10;//int num1 = 10;num1 += 2; //num1 = num1 + 2;System.out.println("num1 = " + num1);int num2 = 12;num2 %= 5;// num2 = num2 % 5;System.out.println("num2 = " +num2);short s1 = 10;
// s1 = s1 + 2;//编译肯定不过s1 += 2;//编译可以通过. 表明不会改变变量本身的数据类型System.out.println("s1 = " + s1);//实际应用开发中,如果使用变量实现+2的操作,有哪些方式//方式一: num = num + 2;//方式二: num += 2;(推荐)//实际应用开发中,如果使用变量实现+1的操作,有哪些方式//方式一: num = num + 1;//方式二: num += 1;//方式三: num++; ((推荐))}
}
6、算术运算符练习题
//练习1int i = 1;i *= 0.1;// *= 赋值 不会改变变量本身的数据类型的System.out.println("i = " + i);//0i++;System.out.println(i);//1//练习2int m = 2;int n = 3;n *= m++;// n = n * m++System.out.println("m=" + m);//3System.out.println("n=" + n);//6//练习3int n1 = 10;n1 += (n1++) + (++n1); //n1 = n1 + (n1++) + (++n1) = 10 + 10(此时自增1,变11)+12=32System.out.println(n1);//32
//练习4//随意给出一个4位整数,打印显示它的个位数、十位数、百位数、千位数的值int num4 = 2893;System.out.println("个位数: " + (num4 % 10));System.out.println("十位数: " + (num4 % 100 / 10));System.out.println("百位数: " + (num4%1000/100));System.out.println("千位数: " + (num4/1000));
7、比较运算符

在这里插入图片描述

码上见:

package com.rucoding.d4;/*** @author LiuYiXin**/
public class CompareDemo01 {
    public static void main(String[] args) {
    //比较运算符int i = 10;int j = 20;System.out.println(i == j);//falseSystem.out.println(i = j); //赋值操作 20boolean b1 = true;boolean b2 = false;System.out.println(b2 == b1); //falseSystem.out.println(b2 = b1); //true}
}

小结: 比较运算符的结果是boolean类型,true 或者 false。注意区分 == 判断等于 ,=赋值操作。

8、逻辑运算符

在这里插入图片描述

逻辑与&、短路与&&(或者称之为单与,双与)、逻辑或|、短路或||(或者称之为单或、双或)。

逻辑与&、短路与&&,逻辑或|、短路或|| 区别

package com.rucoding.d4;
/*** @author LiuYiXin**/
public class LogicDemo01 {
    public static void main(String[] args) {
    //逻辑运算符 &—逻辑与 |—逻辑或 !—逻辑非 &&—短路与 ||—短路或 ^—逻辑异或//逻辑运算符操作的都是boolean的变量//①.& 逻辑与 && 短路与 (短路)//相同点: &、&& 的最终运行结果是相同的,两边都为true的时候结果才会为true//相同点: 当左边为true的时候, &、&&单双与 都会执行右边的运算。//不同点: 当左边为false的时候,&单与会继续执行右边的运算, &&双与(即短路与)不会执行右边的运算//实际开发中,推荐使用&&boolean b1 = true;b1 = false;int num1 = 10;if(b1 & (num1++ > 0)){
    System.out.println("我现在在北京");}else{
    System.out.println("我现在在南京");}System.out.println("num1 = " + num1);boolean b2 = true;b2 = false;int num2 = 10;if(b1 && (num2++ > 0)){
    System.out.println("我现在在北京");}else{
    System.out.println("我现在在南京");}System.out.println("num2 = " + num2);//②.| 逻辑或 || 短路或 (短路)//相同点: |、|| 逻辑或、短路或 最终运算结果都是相同的,有一个为true,结果为true//相同点: 当左边运算结果是false的时候,无论逻辑或|、短路或 ||两边都会执行右边运算//不同点: 当左边运行结果为true的时候, 逻辑或| 会继续执行右边的运算, 短路或||不会执行右边的运算//实际开发中,推荐使用||短路或boolean b3 = false;b1 = true;int num3 = 10;if(b3 | (num3++ > 0)){
    System.out.println("我现在在北京");}else{
    System.out.println("我现在在南京");}System.out.println("num3 = " + num3);boolean b4 = false;b4 = true;int num4 = 10;if(b4 || (num4++ > 0)){
    System.out.println("我现在在北京");}else{
    System.out.println("我现在在南京);}System.out.println("num4 = " + num4);}
}

小结:

在这里插入图片描述

9、逻辑运算符练习题

代码演示:

package com.rucoding.d4;/*** @author LiuYiXin**/
public class LogicDemo02 {
    public static void main(String[] args) {
    //练习1int xx1 = 1;int yy1 = 1;if(xx1++ == 2 & ++yy1 == 2){
    xx1 = 7;}System.out.println("xx1=" + xx1 + ",yy1=" + yy1); //2,2//练习2int x1 = 1;int y1 = 1;if(x1++ == 2 && ++y1 ==2){
    x1 = 7;}System.out.println("x1=" + x1 + ",y1=" + y1); //2,1//练习3int x2 = 1;int y2 = 1;if(x2++ == 1 | ++y2 ==1){
    x2 = 7;}System.out.println("x2=" + x2 + ",y2=" + y2);//7,2//练习4int x3 = 1,y3 = 1;if(x3++ == 1 || ++y3 == 1){
    x3 = 7;}System.out.println("x3=" + x3 + ",y3=" +y3);//7,1//综合练习boolean x = true;boolean y = false;short z = 42;
// if(y == true)if((z++ == 42) && (y = true)) z++; //44if((x = false) || (++z == 45)) z++;//46System.out.println("z=" + z);}
}
10、三元运算符

三元(三目)运算符描述:

在这里插入图片描述

代码演示:

package com.rucoding.d4;/*** @author LiuYiXin**/
public class SanYuanDemo01 {
    public static void main(String[] args) {
    //三元运算符。结构: (条件表达式) ? 表达式1 : 表达式2//说明: 条件表达式的结果为boolean类型//①.根据条件表达式的真或假,决定执行 表达式1 还是 表达式2 (条件表达式结果为true 执行 表达式1 ,否则,执行 表达式2)//②.表达式1 和 表达式2 返回结果是可以接收的同一类型。//③.三元运算符可以嵌套使用//1、获取两个整数的较大值int m = 12;int n = 5;int max = (m > n) ? m : n;System.out.println(max);double num = (m > n) ? 2 : 1.0;//System.out.println(num);//嵌套使用n = 12;String result = (m > n) ? "m大" : (m == n) ? "m和n相等" : "n大";System.out.println(result);//2、获取三个数中最大值int n1 = 12;int n2 = 30;int n3 = -24;int maxOne = (n1 > n2) ? n1 : n2;maxOne = (maxOne > n3) ? maxOne : n3;System.out.println(maxOne);//改写成 if-elseif(m > n){
    System.out.println("m大");}else{
    System.out.println("n大");}//改写成 if-elseif(n1 > n2){
    if(n1 > n3){
    System.out.println("n1最大");}else{
    System.out.println("n3最大");}}else{
    if(n2 > n3){
    System.out.println("n2最大");}else{
    System.out.println("n3最大");}}}
}
11、位运算符(了解)

在这里插入图片描述

结论:

1. 位运算符操作的都是整型的数据
2. << :在一定范围内,每向左移1位,相当于 * 2>> :在一定范围内,每向右移1位,相当于 / 2
面试题:最高效方式的计算2 * 8 ?  2 << 3  或 8 << 1
貌似可以解释一下这个问题: 2 表示的二进制 ...010 ,此时向左移动 3 位, 即 ...010 000 (向左移动3位,补上2位) ,结果即是2^4=16。

代码演示:

package com.rucoding.d4;/*** @author LiuYiXin**/
public class BinaryDemo01 {
    public static void main(String[] args) {
    int i = 21;i = -21;System.out.println("i << 2 为 " + (i << 2));System.out.println("i << 3 为 " + (i << 3));System.out.println("i << 27 为 " + (i << 27));int m = 12;int n = 5;System.out.println("m & n 为 " + (m & n));System.out.println("m | n 为 " + (m | n));System.out.println("m ^ n 为 " + (m ^ n));//练习: 交换两个变量的值int num1 = 10;int num2 = 20;//方式一: 定义临时变量;通用的数据类型, 推荐使用的int temp = num1;num1 = num2;num2 = temp;System.out.println("num1 = " + num1 + ",num2 = " +num2);//方式二: 这个弊端,相加的操作数可能会超出存储范围 ; 局限性,只能适用于数字 (数值)类型
// num1 = num1 + num2;
// num2 = num1 - num2;
// num1 = num1 - num2;
// System.out.println("num1 = " + num1 + ",num2 = " +num2);//方式三: 使用位运算符//弊端: 只能适用于数字(数值)类型
// num1 = num1 ^ num2;
// num2 = num1 ^ num2;
// num1 = num1 ^ num2;
// System.out.println("num1 = " + num1 + ",num2 = " +num2);}
}
12、运算符&总结
按照如下思维导图,进行回顾并补充。

在这里插入图片描述

13、运算符的优先级别(了解)
  • 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如表,上一行运算符总优先于下一行。

  • 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。

在这里插入图片描述

  相关解决方案