• 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》中在讲字符串操作符是提到“如果表达式以一个字符串开头,那么后续所有操作数都必须是字符串”,我们知道对开头不是字符串的表达式,只要含有字符串,最终都会转换成字符串,生成一个字符串值,这句话该怎样理解?

  • 相关阅读:
    2021-深信服-安服实习-面试反省
    cookie越权的一个案例
    图片大小相关参数可控导致ddos的一个案例
    流量代理-reGeorg脚本实现
    端口转发-lcx
    渗透各阶段目标&错误配置&正反向连接&MSF初探
    权限维持-几种常用手段复现
    解决pip安装第三方包编码错误:UnicodeDecodeError: 'ascii' codec can't decode byte....
    黑龙江网络安全技能竞赛awd后门分析复现
    实验吧-PHP大法-eregi()函数
  • 原文地址:https://www.cnblogs.com/QuentinYo/p/3579946.html
Copyright © 2020-2023  润新知