3.Java 运算符和语句

本文详细介绍了Java中的数据类型,包括基本数据类型和复合数据类型的转换,重点讲解了自动类型转换和强制类型转换。此外,还讨论了各种运算符的使用,如赋值、算术、比较、逻辑和位运算符,并通过实例展示了它们的运用。最后,简要阐述了Java的选择结构——if语句和switch语句的基本用法。
摘要由CSDN通过智能技术生成

3. Java运算符和语句

补充上一章的变量:

变量---可认为是一个程序执行的最小单位

变量的格式:数据类型   变量名称=初始值;

1.Java中的数据类型:

     a)基本数据类型

byte  short  int  long  float  double  char  boolean

     b)复合数据类型

2.基本数据类型转换

      a)Boolean布尔型不参与基本数据类型转换;

      b)基本数据类型精度排序(小---大

      c)隐式数据类型转换【自动数据类型转换】

        数据类型精度转换成数据类型精度的这个过程就是隐式数据类型转换【自动数据类型转换】

格式:高类型  变量名称=低【值/变量】;

例:

public class DataType{

    public static void main(String args[]){

                  //100 int型赋值给double,自动类型转换

                      int intnum1=100;

                      double dounum1=intnum1;

                      double dounum2=123;

       System.out.println("dounum1="+dounum1+",dounum2="+dounum2);

      }

}

输出为:

E:\学习记录\第三课 Java运算符-语句>javac DataType.java

E:\学习记录\第三课 Java运算符-语句>java DataType

dounum1=100.0,dounum2=123.0

     d)显式数据类型转换【强制数据类型转换】

数据类型精度转换成数据类型精度的这个过程就是隐式数据类型转换【自动数据类型转换】

格式:低类型  变量名称=(低)高【值/变量】;

例:


public class DataType{

public static void main(String args[]){

                  //精度高赋值给精度低的会报错

                   /*

                   double dounum3=13.14;

                   int intnum2=dounum3;

                   错误: 不兼容的类型: 从double转换到int可能会有损失

                  */

                   //强制转换

                  double dounum3=13.14;

                  int intnum2=(int)dounum3;

                  int intnum3=(int)52.0f;

System.out.println("intnum2="+intnum2+",intnum3="+intnum3);

           } 

}

输出为:

E:\学习记录\第三课 Java运算符-语句>javac DataType.java

E:\学习记录\第三课 Java运算符-语句>java DataType

intnum2=13,intnum3=52

   e) char与int

 public class DataType{

public static void main(String args[]){

//chart 与int 转换

//自动类型转换

char char1='家';

int  intnumb1=char1;

System.out.println("intnumb1="+intnumb1);//输出为23478

//强制类型转换

int intnumb2=23478;

char char2=(char)intnumb2;

System.out.println("char2="+char2);

           } 

}

输出为:

E:\学习记录\第三课 Java运算符-语句>javac DataType.java

E:\学习记录\第三课 Java运算符-语句>java DataType

intnumb1=23478

char2=家

    f) int转换成byte

byte转换成int---隐式数据类型转换【自动数据类型转换】

int转换成byte---显式数据类型转换【强制数据类型转换】

例:

public class DataType{

public static void main(String args[]){

       //byte转换成int---隐式数据类型转换【自动数据类型转换】

       byte bytenum1=120;

       int intnumtest1=bytenum1;

       System.out.println("intnumtest1=="+intnumtest1);

    //int转换成byte---显式数据类型转换【强制数据类型转换】

    int intnumtest2=129;

    byte bytenum2=(byte)intnumtest2;

    System.out.println("bytenum2=="+bytenum2); //输出为-127

    int intnumtest3=-130;

    byte bytenum3=(byte)intnumtest3;

       System.out.println("bytenum3=="+bytenum3); //输出为126

    } 

}

输出为:

E:\学习记录\第三课 Java运算符-语句>javac DataType.java

E:\学习记录\第三课 Java运算符-语句>java DataType

intnumtest1==120

bytenum2==-127

bytenum3==126

【超过范围规则】

  • 当整数int转换成byte时,int取值正数超过byte范围以后,会从byte最小值向前推进计算。
  • 当整数int转换成byte时,int取值负数超过byte范围以后,会从byte最大值向后推进计算。

比如129,超出127两个数,所以往负数那边走两个,得到-127;

比如-130,超出-128两个数,所以往右边正数走两个,得到126。

3.1 Java中的运算符

      1)赋值运算符=

      2)算术运算符

+

-

*

/

%

++

--

取余

自动加1

自动减1

【注意事项】

  • /和%的区别:两个数据做除法,/取结果的商,%取结果的余数。整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

例:

public class YunSuanFu{

           public static void main(String args[]){

            int int1=100;

            int int2=10;

            int int3=3;

            float float1=3f;

           //+ 1.进行加法运算  2.连接符号

            System.out.println(int1+"+"+ int2+"="+(int1+int2));  //110

            System.out.println(int1+"-"+ int2+"="+(int1-int2));   //90

            System.out.println(int1+"*"+ int2+"="+(int1*int2));   //1000

            System.out.println(int1+"/"+ int2+"="+(int1/int2));   //10

           //两个数据做除法,/取结果的商,%取结果的余数

            System.out.println(int1+"/"+ int3+"="+(int1/int3));   //33

            System.out.println(int2+"/"+ float1+"="+(int2/float1));    //33.333333

            System.out.println(int2+"%"+ int3+"="+(int2%int3));   //1

           } 

}
  • 变量++【先用后加1】         ++变量 【先加1后用】

变量-- 【先用后减1】         --变量 【先减1后用】

例:

public class YunSuanFu{
      public static void main(String args[]){
           //变量++【先用后加1】,第二次在输出值会自动加1
            System.out.println(int1++);//100
            System.out.println(int1);//101
            // ++变量 【先加1后用】
            System.out.println(++int1);//102
            System.out.println(int1);//102  
           //--同理
            System.out.println(int1--);//102
            System.out.println(int1);//101
            System.out.println(--int1);//100
            System.out.println(int1);//100
           }  
}

        3)比较运算符

符号

说明

>

判断是否大于,成立为true,不成立为false

<

判断是否小于,成立为true,不成立为false

>=

判断是否大于等于,成立为true,不成立为false

<=

判断是否小于等于,成立为true,不成立为false

!=

判断是否不等于,成立为true,不成立为false

==

判断是否等于,成立为true,不成立为false

运算结果为boolean

例:

public class YunSuanFu{

      public static void main(String args[]){

              int a=15;

              int b=20;

              System.out.println(a+">"+b+"="+(a>b)); //false

              System.out.println(a+"<"+b+"="+(a<b)); //true

              System.out.println(a+">="+b+"="+(a>=b)); //false

              System.out.println(a+"<="+b+"="+(a<=b)); //true

              System.out.println(a+"=="+b+"="+(a==b)); //false

              System.out.println(a+"!="+b+"="+(a!=b)); //true

           } 

}

输出为:

E:\学习记录\第三课 Java运算符-语句>javac DataType.java

E:\学习记录\第三课 Java运算符-语句>java DataType

15>20=false

15<20=true

15>=20=false

15<=20=true

15==20=false

15!=20=true

     4)逻辑运算符

&

逻辑与

有false则false

|

逻辑或

都false则false

^

逻辑异或

相同为false,不同为true

!

逻辑非

相反

&&

短路与

作用和&相同,但有短路效果

||

短路或

作用和|相同,但有短路效果

【注意事项】

  • &&运算符号的左边结果为false时,右边不执行;
  • ||运算符号的左边结果为true时,右边不执行;

例:

public class YunSuanFu{

      public static void main(String args[]){

       /*

                逻辑运算符

            */

             //&逻辑与,有false则false

             int i=10;

             int j=20;

             int k=30;

             System.out.println((i>j)&(i>k));//false&false   输出为false

             System.out.println((i<j)&(i>k));//true&false   输出为false

             System.out.println((i>j)&(i<k));//false&true   输出为false

             System.out.println((i<j)&(i<k));//true&true   输出为true

            //|逻辑或,都false则false

             System.out.println((i>j)|(i>k));//false|false   输出为false

             System.out.println((i<j)|(i>k));//true|false   输出为true

             System.out.println((i>j)|(i<k));//false|true   输出为true

             System.out.println((i<j)|(i<k));//true|true   输出为true

            //^逻辑异或,相同为false,不同为true

             System.out.println((i>j)^(i>k));//false^false   输出为false

             System.out.println((i<j)^(i>k));//true^false   输出为true

             System.out.println((i>j)^(i<k));//false^true   输出为true

             System.out.println((i<j)^(i<k));//true^true   输出为false

            //!与后面的结果相反

             System.out.println((i>j));//false

             System.out.println(!(i>j));//!false    即true

            //&&  ||

            System.out.println((i>j)&& ((10/0)>1) ); //左边false,右边不执行,还是false

            /*

           左边true,右边执行,但右边除数不能0所以报错

           Exception in thread "main" java.lang.ArithmeticException: / by zero

           //System.out.println((i<j)&& ((10/0)>1) );

          */

            System.out.println((i<j)|| ((10/0)>1) ); //左边true,右边不执行,还是true

           } 

}

     5)位运算符

符号

名称

作用

~

取反

0和1相反

&

按位与

相同1为1,不同为0

|

按位或

全0为0,有1则1

^

按位异或

不同为1,相同为0

>>

右移位

右移1位相当除2取商

<<

左移位

左移1位相当于乘2

【注意】&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。

 运算规则:

位运算符需要将数据转换成二进制【00101010】数据进行运算

       掌握十进制转二进制 :短除法[笨]  8421码转化法

       【8421码转化法】           

1024  512  256  128  64  32  16  8  4   2   1

       7=4+2+1----- 0    0    0    0    0   0   0  0  1   1   1  --- 00000111

       13=8+4+1---- 0    0    0    0    0   0   0  1  1   0   1  --- 00001101

       负数的2进制:实质上补码表示

      正数的补码是本身

       负数的补码是反码+1

       反码的表示方法是:

       正数的反码是其本身【原码】

       负数的反码是在其源码的基础上, 符号位不变,其余各个位取反。

       源码就是符号位加上真值的绝对值,即用第一位表示符号, 其余位表示值。

比如:-7的2进制 (源码---反码---补码)

-7————7的2进制—00000111---[-7的源码]10000111-----[-7的反码]11111000---[-7的补码]11111001

① |按位或   全0为0,有1则1

【7|-7】

【7 】00000111

【-7】11111001

      11111111【转十进制—开头为1为负数,负数的补码11111111---负数的反码减个1就是11111110----负数的源码10000001-----对应得正数二进制为000000001,所以十进制为-1】

    ② &按位与   相同1为1,不同为0

【7 & -7】

00000111

11111001

00000001

③ ^按位异或   不同为1,相同为0

【7 ^ -7】

00000111

11111001

11111110

④ ~取反  

⑤<< 左移位   2进制整体向左移动指定的位数

⑥>> 右移位   2进制整体向右移动指定的位数

面试题:最有效率的方法算出2乘以8等于几?  2<<3; 表示2 向左移3位

代码演示:

public class YunSuanFu{

      public static void main(String args[]){

              System.out.println(7 | -7); //-1

              System.out.println(7 & -7); //1

              System.out.println(7 ^ -7); //-2

              System.out.println(7<<2); //28

              System.out.println(7>>2); //1

          } 

}

      6)三元运算符

格式:  关系表达式 ? 表达式1:表达式2;

首先计算关系表达式的值,

如果值为true,表达式1的值就是运算结果;

如果值为false,表达式2的值就是运算结果。

例:

public class YunSuanFu{

      public static void main(String args[]){

            //三元运算符

            //定义两个变量

            int g = 10;

            int h =20;

           //获取两个变量中的最大值

           int max=g>h ? g : h;

           System.out.println("max="+max);   //输出为max=20

             } 

}

3.2 java中的语句

  1. 顺序结构 【写好的代码从上往下一行一行的逐个执行】
  2. 选择结构【if语句  switch语句】
  • if语句
public  class  IfDemo{

public  static void  main(String  args[]){

        //if(判断){java代码} 【只选对的】

        //先执行判断,true时执行{java代码},false时不执行

        /*

        int  code=59;

        if(code>=60){

               System.out.println("及格");

        }

        */

        //if(判断){java代码1}else{java代码1}【2选1】

        //先执行判断,true时执行{java代码1},false时执行{java代码2}

        /*

        int  code=59;

        if(code>=60){

               System.out.println("及格");

        }else{

               System.out.println("不及格");

        }

        */

        //if(判断1){java代码1}else if(判断2){java代码2}......else{java代码n}【多选1】

        //先执行判断1,判断1true时执行{java代码1},false时执行判断2,判断2为true{java代码2}

        //所有的判断都为false,则执行最后一个else中的{java代码n}

        /*

        int  code=59;

        if(code>=60 && code<79){

               System.out.println("及格");

        }else if(code>=80 && code<90){

               System.out.println("良好");

        }else if(code>=90 && code<=100){

               System.out.println("优秀");

        }else{

               System.out.println("不及格或者有错!");

        }

         */

        /*

        if(判断1){

               if(判断2){

                             java代码1

                      }else{

                             java代码2

               }

        }else{

               if(判断3){

                             java代码3

                      }else{

                             java代码4

               }

        }

        if语句的嵌套

        */

        //判断1为true,执行判断2,判断2为true时java代码1,判断2为false时java代码2

        //判断1为false,执行判断3,判断3为true时java代码3,判断3为false时java代码4

        int  code=59;

        if(code>=60){

               if(code>=80){

                      System.out.println("优秀");

                      }else{

                      System.out.println("良好");

               }

        }else{

               if(code>=0){

                      System.out.println("不及格");

                      }else{

                      System.out.println("不能为负数");

               }

        }



       

}

}
  • switch语句
public  class   SwitchDemo{

public  static  void  main(String  args[]){

        //switch语句

        /*

        switch(表达式){

          case  常量值1: java代码1;[break;]

                case  常量值2: java代码2;[break;]

                case  常量值3: java代码3;[break;]

                     ......

                      case  常量值n: java代码n;[break;]

               default:java代码;[break;]

        }

        先执行表达式,表达式的结果与case后面的常量值匹配,

               如果匹配结果相等,执行对应case后面的java代码,

                 如果有break就结束switch语句的执行。

                     如果没有break,那么执行下一个case对应的java代码,直到有break,结束

        表达式的结果与所有case后面的常量值都不匹配,那么执行default后面的代码

        注意1:表达式的类型可以是byte  short  char  int  long String[jdk8.0],枚举

        注意2:有没有break,有break就结束执行,

                         没有break执行下一个case对应的java代码,直到有break



        */

        int num1=10;

        int num2=3;

        char op='+';

        switch(op){

               case '+':System.out.println(num1+"+"+num2+"="+(num1+num2));

               case '-':System.out.println(num1+"-"+num2+"="+(num1-num2));

               case '*':System.out.println(num1+"*"+num2+"="+(num1*num2));break;

               case '/':System.out.println(num1+"/"+num2+"="+(num1/num2));

        default:System.out.println("运算有误!");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java-请多指教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值