欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基本运算

程序员文章站 2022-05-18 16:41:50
...

运算符作用:用来进行数据的运算、赋值、比较等操作

1.算数运算:

++:自增
 --:自减
①(+ - * /)都是需要两个操作数
② ++  -- 只需要一个操作数
        注意:++ -- 只能够应用于变量,不能用于常量
        不管++、--在前或在后,最后改变量的值都会自增或自减
        ++: 如果在前表示先自增再赋值,如果在后表示先赋值再自增    

辅助: i++  先赋值给i++  然后再自增1

           ++i  先自增1给++i  再赋值(i++  和 ++i可看成一个运算式,每一个人理解不一样,我口语也表达不清楚,有点绕脑壳,反正就比如:int i = 3; i++现在等于3,然后程序由上到下执行完i++这一步之后下一个i等于4  )

Java基本运算

int i = 2;
System.out.println("i:"+i);//2
System.out.println("i++:"+i++);//表示①将 i的值直接赋值给i++ 这个整体;②将i的值+1,最后i变成+1后的值
System.out.println("i:"+i);//3
System.out.println("++i:"+ ++i);//表示①将 i的值+1后赋值给++i 这个整体;②最后i变成+1后的值
System.out.println("i:"+i);//4

可以将i++看成一个表达式

Java基本运算

2.赋值运算:( =    +=     -=     *=     /=    %= )

注意:把=    +=     -=     *=     /=    %=看成是一个符号,= 优先级最低

      ex:  int i = 2;

                i +=5;  // 7    ==》  i=(int)i+5  默认有个转换

3.比较运算:==    !=     >    <    >=    <=   

instanceof:面向对象用,判断类型是否属于,即一个数据是否是某种类型,仅用于引用数据类型,不能用于基本数据类型

      int a = 5;

     System.out.println(a instanceof int);  // 错误:这是基本数据类型

     String str = “helllo”;

     System.out.println( str instanceof String);  //true

4.逻辑运算(LogicalOperators) :两边必须是布尔值 

逻辑运算符有如下:

&&: 逻辑双与    表示并且的关系     同true为true,否则为false,有短路功能,且逻辑运算效率高于&,当左边的结果值为false时短路
&  : 逻辑单与    表示并且的关系     同true为true,否则为false,有位运算的功能
||  : 逻辑双或    表示或者的关系     同false为false,否则为true,有短路功能,且逻辑运算效率高于|,当左边的结果值为true时短路
|   :  逻辑单或    表示或者的关系     同false为false,否则为true,有位运算的功能
     
^  :   异或        两边不一样结果true,否则为false。同假异真 
!  :   逻辑非      把true变成false   把false变成true。非真即假,非假即真,作用于一个条件
逻辑运算符的优先级: !  >  &&(&)  >  ||(|)

        ex: System.out.println(true || true && false);    //  true

          |、&  与  ||、&&的区别:(看两边类型)

    ① &&、||   只能是逻辑运算        

   【   特点:还具有短路行为(如果左边的条件能确定整个表达式的结果值,右边的条件将不再进行运算,即可提高执行效率,&&:左边为false短路,||:左边为true短路)  】

    ② &、|    可以是逻辑运算符,也可以是位运算符

 

          短路验证:

方法①: 可以在右边使用一些自增的语句,从结果来看值的变化

             int i = 1;

              System.out.println(false && i++ == 1);  //false  判断右边i++

              System.out.println(i);  //1

              System.out.println(false & i++ == 1);   //false

              System.out.println(i);    //2

=======================================

              int i = 1;

              System.out.println(true || i++ == 1);  //true

              System.out.println(i);  //1

              System.out.println(true | i++ == 1);  //true

              System.out.println(i);    //2

方法②:右边部分中包含一个错误(异常)      ex:除0  

System.out.println(5<0 && 5/0>0);//在这里5/0会报错,左边为false,&&短路将不再执行右边

Java基本运算Java基本运算

5.位运算:(按照数字的二进制位进行操作  了解就行)  

1.    &   两个位都为1 结果为1 否则0。同一为一 
         3 & 5
         0011
       & 0101
         ------
         0001  ->1
2.    |   只要有一位为1 结果 1。有一即一
        3 | 5
         0011
       | 0101
         ------
         0111  ->7
3.    ^   1-0   0-1  结果都为1  否则为0.同0异1;
        3 ^ 5
         0011
       ^ 0101
         ------
         0110 ->6

4.    ~   按位取反 1--》0  0--》1  作用于单个条件
            ~3
         将该数字+1后,前面加上负号(-)
         
5.    <<   把二进制位向左移动,如果最高位是0,那么后面补0,如果是1,那么 补1
        3<<2        有溢出风险
        0011        在没有溢出的前提下,结果就是将该数字 *2^n ,n表示移动位数
        -------        如果溢出的话,会以二进制进位
        1100  -》12
6.    >>   把二进制位向右移动,如果最高位是0,那么后面补0,如果是1,那么 补1
        3>>2        
        0011    3    在没有溢出的前提下,结果就是将该数字 /2^n ,n表示移动位数
        -------        如果溢出的话,会以二进制进位
        0000  -》0
7.    >>>  无符号向右移动,不管前面最高位是0还是1,右边永远补0,所有负数的无符号右移,没有数学意义
        3>>>2        
        0011    3
        -----
        0000    0

ex:         

public static void main(String[] args) {
		System.out.println(3&5);//1
		System.out.println(3|5);//7
		System.out.println(3^5);//6
		System.out.println(~3);//-4
		System.out.println(~-4);//3
		System.out.println(3<<2);//12
		System.out.println(3>>2);//0
		System.out.println(3>>>2);//0
		System.out.println(-3>>2);//-1
		System.out.println(-3>>>2);//1073741823

		int a = 3;
		int b = 5;
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		System.out.println(a);//5
		System.out.println(b);//3
}

6.三目运算(三元运算):   X ? Y : Z

       X:可以代表是boolean值或布尔表达式,或者运算结果为boolean值只有true/ false

       如果X为true,那就执行Y值,若不为true就执行Z

       ex:  System.out.println(3 > 2 ? "正确!!" : "错误!! ");   //正确

注意: ①如果以变量储存,Y和Z必须返回同种类型

            ②Y和Z可以是不同的数据类型,但不能用变量接收

            ③只有当Y和Z数据类型相同时,才能被接收

            ④可以嵌套使用  (记得嵌套的时候将嵌套的加上()    目的:可读性易懂)

                   X ? Y : ( a ? b : c)

            ⑤不能直接单独使用,因为它是一个值

 

 

 

 

 

 

 

 

 

相关标签: Java运算符