zoukankan      html  css  js  c++  java
  • Java操作符

    几乎所有运算符都只能操作“主类型”(Primitives)。例外是“=”、“= =”和“! =”,它们能操作所有对象。除此以外,String类支持“+”和“+=”。
    注:所谓“主类型”,即基本类型:boolean、char<16bits>、byte<8bits>、short<16bits>、int<32bits>、long<64bits>、float<32bits>、double<64bits>、void。

    一、赋值
    主类型使用“A=B”,那么B处的内容就复制到A。若修改A,那么B根本不会受修改的影响。

    对象“赋值”的时候情况发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C和D最终都会指向最初只有D才指向的那个对象。
    short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
    short s1 = 1; s1 += 1;(可以正确编译) +=运算符无类型转换问题

    二、算术运算符
    Java的算术运算符:加号(+)、减号(-)、除号(/)、乘号(*)以及模数(%,从整数除法中获得余数)。整数除法会直接砍掉小数,而不是进位。

    三、自动递增、递减
    对于前递增和前递减(如++A或--A),会先执行运算,再生成值。

    对于后递增和后递减(如A++或A--),会先生成值,再执行运算。

    四、关系运算符
    关系运算符包括<、>、<=、>=、= =、!=。

    等于和不等于适用于所有内建的数据类型,但其他比较不适用于boolean类型。想对比两个对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。equals()方法不适用于“主类型”,那些类型直接使用= =和!=即可。equals()的默认是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄= =和! =比较的是对象句柄,而不是对象的实际内容。

    五、逻辑运算符
    逻辑运算符&&、||、!能生成一个布尔值。

    &和&&都可作为逻辑运算符“与”使用,但是&&是“短路与”,运算时先判断符号前面的表达式的值,如果能够确定整个表达式的值,则不进行符号后面的表达式的运算。另外,&可作为位运算符使用。

    六、按位运算符
    按位AND运算符(&)

    按位OR运算符(|)
    按位XOR(^,异或)
    按位NOT(~,也叫作“非”运算符)属于一元运算符,生成与输入位的相反的值

    七、移位运算符
    左移位运算符(<<)能将运算对象向左移动运算符右侧指定的位数(在低位补0)。

    有符号右移位运算符(>>)将运算对象向右移动运算符右侧指定的位数。有符号右移位运算符使用了符号扩展:若值为正,则在高位插入0;若值为负,则在高位插入1
    无符号右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0

    八、三元IF-ELSE运算符
    布尔表达式 ? 值0:值1   “布尔表达式”的结果为true,就计算“值0”,否则计算“值1”

    九、字符串运算符+和+=
    int x = 0, y = 1, z = 2;

    System.out.println(“out:” + x + y + z);
    在这里,Java编译程序会将x,y和z转换成它们的字串形式,而不是先把它们加到一起。
    运用“String +”时,若表达式以一个String起头,那么后续所有运算对象都会转换到字串。
    想通过“加号”连接字串(使用Java的早期版本),请务必保证第一个元素是字串。

    十、造型(Cast)运算符
    对于“缩小转换”(Narrowing Conversion)的操作(能容纳更多信息的数据类型,将其转换成容量较小的类型,例如int转short),此时就可能面临信息丢失的危险。此时,编译器会强迫我们进行明确造型。

    对于“放大转换”(Widening conversion),则不必进行明确造型,因为新类型肯定能容纳原来类型的信息,不会造成任何信息的丢失。
    布尔值(bollean)根本不允许进行任何造型处理,其它任何主类型可互相造型。
    将float或double值造型成整数值后,总是将小数部分“砍掉”,不作任何进位处理。

    Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
    Math.round(11.5)==12      Math.round(-11.5)==-11
    round方法返回与参数最接近的长整数,参数加1/2后求其floor,故(-11.5)+0.5=11。

    十一、Java操作符的优先级和结合性

     优先级  操作符  结合性
     1  [ ] . ( ) (函数呼叫)  从左到右
     2  ! ~ ++ -- +(单操作数) –(单操作数) ( ) (类型转化) new  从右到左
     3  * / % 从左到右
     4  + -  从左到右
     5  <<   >>   >>>  从左到右
     6  <<=  >>= instance of  从左到右
     7  == !=  从左到右
     8  &  从左到右
     9  ^  从左到右
     10  |  从左到右
     11  &&  从左到右
     12  ||  从左到右
     13  ?   :  从右到左
     14  = += -= *= /= %= ^= <<= >>= >>>=  从右到左
  • 相关阅读:
    快速获取JOB运行结果
    快速获取DB服务器当前 MEM CPU的资源消耗
    Mongodb Sharding+Replica Set
    MongoDB replSet
    Journal工作原理
    Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)
    Oracle索引梳理系列(七)- Oracle唯一索引、普通索引及约束的关系
    Oracle索引梳理系列(六)- Oracle索引种类之函数索引
    Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)
    Oracle索引梳理系列(四)- Oracle索引种类之位图索引
  • 原文地址:https://www.cnblogs.com/ckwblogs/p/5973328.html
Copyright © 2011-2022 走看看