zoukankan      html  css  js  c++  java
  • Java基础:操作符总结

    1、算术操作符

    整数除法会直接去掉结果的小数位,而不是四舍五入地处理结果。

    1 int a=3, b;
    2 b = a/2;
    3 System.out.println(b);
    4 //the output is 1

     byte、char、short参加运算时会被提升为int。

    +=、-+、*=、/=在左操作数为byte、char、short类型时,运算前提升为int,赋值时则被截取。

    byte b = 20;
    //byte a = b + 2;    //编译错误:Type mismatch: cannot convert from int to byte
    byte a = (byte) (b + 2);
    
    System.out.println(Integer.toBinaryString(b+120));
    b += 120;
    System.out.println(Integer.toBinaryString(b));
    //output:
    //10001100
    //11111111111111111111111110001100

    2、一元加减号

    一元减号具有数学上负号的作用

    int a = 3, b;
    b = -a;
    System.out.println(b);
    //the output is -3

    一元加号只是作为一元减号的对应被创造的,没有什么作用。EXCEPT下面这一条:

    一元加减号的操作数为byte、chart、short变量时,一元加减号会将其提升为int型,这点在赋值操作是需要注意。

    byte b = 4;
    //byte bb = -b;    //编译错误:无法从int转换到byte
    //byte bb = +b;    //编译错误:无法从int转换到byte
    byte bb = (byte)-b    //正确,需要进行强制类型转换

    3、按位操作符

    按位操作符用来操作整数基本数据类型中的单个“比特”,即二进制位。按位操作符会对两个参数中对应的二进制位(由低位到高位,所有位都参与运算,包括符号位)执行布尔运算,并最终生成一个结果。

    按位操作之前,byte、char、short会被提升为int。

    &=、|=、^=都是合法的,但是不存在~=,因为~是一元操作符。

    左操作数为byte、char、short时,由于在移位之前进行了提升,赋值的时候会发生截断(高位会被截掉)。

    按位操作符与逻辑操作符长得很像,下面会对二者进行比较说明。

    4、移位操作符

    移位的时候会对所有二进制位进行移动,所以此时不区分符号位。

    左移(<<)在低位插入0。

    有符号右移操作符(>>)使用符号扩展,符号为正,则在高位插入0,符号为符,则在高位插入1。

    无符号右移操作符(>>>)使用“零扩展”,无论正负,都在高位插入0。

    如果对byte、char、short类型的变量进行移位处理,那么在移位之前这些变量会被转换成int型,并且得到的结果也是int型。

    <<=、>>=、>>>=左操作数为byte、char、short时,由于在移位之前进行了提升,赋值的时候会发生截断(高位会被截掉)。此时对于>>>=可能得不到正确的结果。

    5、自增、自减操作符

    不会对变量进行提升。

    6、关系操作符

    ==和equals的比较

    ==是比较引用是否相等,即两个引用是否指向了同一块存储空间,比较的是引用的值。

    equals方法默认也是比较引用,功能与“==”完全一样,看下Object类的源码就知道。

    public boolean equals(Object obj) {
        return (this == obj);
    }

    如果想用equals方法实现比较对象内容的功能,需要重写equals方法。目前大多数java类库都重写了equals方法。

    7、逻辑运算符

    逻辑运算符只可用于布尔值,位运算一般用于整型数,但有一个特例。java将布尔值作为一种单比特值对待,所以可以对其进行&、|、^运算,但是不能进行~运算,避免与逻辑NOT混淆。

    所以对于&&、||可以替换成&、|。注意:尽管两者都可以实现正确的逻辑运算,但是由于逻辑运算符具有短路功能,而位操作符不具有此功能,所以有时候代码效率会不同。

    8、直接常量就是字面常量,译为literals

    9、字符串操作符+、+=

    进行字符串连接的时候会调用对象的toString()方法。

    int arr[] = {1,2,3};
    System.out.println("结果:"+arr);
    //结果:[I@1afae45

    有一点疑惑,《thinking in java》中在讲字符串操作符是提到“如果表达式以一个字符串开头,那么后续所有操作数都必须是字符串”,我们知道对开头不是字符串的表达式,只要含有字符串,最终都会转换成字符串,生成一个字符串值,这句话该怎样理解?

  • 相关阅读:
    状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely
    简单几何(推公式) UVA 11646 Athletics Track
    简单几何(四边形形状) UVA 11800 Determine the Shape
    简单几何(求交点) UVA 11437 Triangle Fun
    计算几何模板
    简单几何(相对运动距离最值) UVA 11796 Dog Distance
    简单几何(求划分区域) LA 3263 That Nice Euler Circuit
    覆盖的面积 HDU
    Desert King 最小比率生成树 (好题)
    约会安排 (区间合并)毒瘤题
  • 原文地址:https://www.cnblogs.com/QuentinYo/p/3579946.html
Copyright © 2011-2022 走看看