zoukankan      html  css  js  c++  java
  • Java运算符

    1.算术运算符

    +  正号、加号,连接字符串

      注意 “+” 遇到字符串,才变成字符串连接符,如"System.out.println(3+4+"3+4"+5+6);的结果是73+456

          任何类型只要和字符串+, 所有的数据都变成了字符串

    public class Operator {
    	public static void main(String[] args){
    		boolean b = true;
    		String s = "abc"+b;
    		System.out.println(s);//输出 abctrue
    	}	
    }
    

      

    -  减号,负数

    * 乘号

    / 除号

      注意当除号两边为整数时,取整数部分,舍余数。当其中一边为浮点型时,按正常规则相除。

    % 取余

      小数取余没有意义。结果符号与被取余符号相同。

    对于除法运算和取模运算:

    整数做被除数时,0不能做除数,否则报错。

    小数做被除数时,整除0结果为Infinity,对0取模结果为NaN

     

    ++ 自增

    --  自减

      i++与++i的区别

      我们常说i++先用后加,++i先加后用。  

      首先,单独的i++与++i,这个表达式独立计算的时候,没有任何区别,字节码是完全一样的。就是单纯把 i所在的局部变量表那个位置的值加1。

         但是变量如果参与了其他运算,就有区别了

        i++ 和 ++i 只有在最终赋值给某变量时(实际上是因为参与了运算,因为直接赋值也是一种无运算符号的运算),字节码指令是不同的,而且也只是顺序上的不同。

      区别是

    • i++:先将局部变量表中的 i 放入操作数栈中,再将局部变量表中的 i 值 +1
    • ++i:先局部变量表中的 i 值 +1,再将i放入操作数栈中

       参考:显微镜下的i++与++i

      

    2.赋值运算符

    =     +=    -=         *=         /=          %=

    注意:诸如+=这样形式的赋值运算符,会将结果自动强转成等号左边的数据类型。

    如下代码编译不会通过

    byte b=1;
    b = b+1;

    因为b是byte类型,1是int类型,相加时b自动被提升成int类型,相加的结果应该是int类型。把int类型的值赋值给byte类型的值会报错。

    而如下代码可以编译通过

    byte b=1;
    b += 1;

    因为类似 += 这种运算符,会将结果自动强转成等号左边的数据类型。b+=1是一次运算,而b=b+1是两次运算(先计算b+1的值,再将b+1的值赋给b)

    b += 1; 等价于 b = (byte)(b+1);

    3.比较运算符

    ==  !=   >    <       >=      <=  

    比较运算符两边的操作数的大小关系,结果为true或false

    4.逻辑运算符

    &   |     !     ^     &&         ||

    逻辑运算符两边的操作数均为布尔值,如

    System.out.println(1&true);

    编译会报错“ 二元运算符 '&' 的操作数类型错误”

    表达式的运算结果也是布尔值

    &&(短路与)左边为false,则结果为false且右边不执行;||(短路或)左边为true,则结果为true且右边不执行

    &&、||与&、|相比更有效率,所以我们一般采用&&、||。

    5.三元运算符

    格式:

     (条件表达式)?表达式1:表达式2;

      若条件表达式的值为true,则运算结果为表达式1,反之,为表达式2。 

    运算符有优先级,赋值运算符优先级最低,不确定的优先级的时候加上小括号即可。

  • 相关阅读:
    (整理)REHL6.5_Yum安装Reids
    (整理)REHL6.5_安装本地yum
    (转)MSSQLSERVER执行计划详解
    (转)SQLServer_十步优化SQL Server中的数据访问四
    (转)SQLServer_十步优化SQL Server中的数据访问五
    (转)SQLServer_十步优化SQL Server中的数据访问 三
    (转)SQLServer_十步优化SQL Server中的数据访问 二
    (转)SQLServer_十步优化SQL Server中的数据访问一
    (转)EF5+SQLserver2012迁移到EF6+mysql5.5.47
    (整理)MySQL_REHL6.5 MySQL5.5 中文支持问题
  • 原文地址:https://www.cnblogs.com/shizunatsu/p/14231099.html
Copyright © 2011-2022 走看看