• Java基础(一)--操作符


    Java底层都是使用操作符来操作Java中的数据

    常见的操作符:+、-、*、/、=

    优先级:

      当一个表达式存在多个操作符时,操作符的优先级决定了计算顺序,这点在我们刚开始学习数学的时候就会了解到

      如果一个字符串后面有个+,在后面有非String类型的元素,会自动转换为String

    关系运算符:> < <= >= == !=

      基本数据类型通过==进行比较,其包装类需要用equals进行比较

    Integer a = new Integer(2);
    Integer b = new Integer(2);
    int c = new Integer(2);
    int d = new Integer(2);
    System.out.println(a == b);
    System.out.println(c == d);
    System.out.println(a.equals(b));

    a,b是对象,其内容相同,但是引用不同,如果比较对象,可以使用equals,而c,d虽然也是new Integer(),但只是把值赋给c,d

    逻辑运算符:

    && || !,只能用于Boolean的比较,注意和& | ^ ~的区分(按位操作符)

    短路:

      &&除了与运算,还有一个功能就是短路,这也是面试中可能遇到的问题

    if (false && true) {    //第一个表达式为false,就不会计算比较后面的部分,可以获得性能提升
                
    }

    直接常量:

    doubledouble = 1d;
    
    floatfloat = 1f;
    
    longlong = 1L;

    PS:d/f/l大小写都可以

    无论是Long还是Integer,都可以转换为二进制、八进制、十六进制的String,方法分别是:toBinaryString、toOctalString、toHexString

    Double只有toHexString

    八进制:以0开头,后面0-7

    十六进制:以0x开头,后面为0-9-a-f

    指数计数法:

    float f = 1.39e-43f;
    double d = 47e47d;
    double d = 47e47;  //此时double的d可以省略的,编译器通常把指数当做double处理的,所以float必须声明的

    "e"代表自然对数的基数,约等于2.718。1.39e-43f就是1.39*2.718^-43,然而在Java、C、C++中,e等于10,也就是1.39*10^-43

    按位操作符:

      用来操作操作整数中的单个bit,也就是二进制,直接对底层进行操作,设置寄存器内的二进制位

    &:按位与

    |:按位或

    ^:按位亦或

    ~:按位非,也就是取反

    ~是一元操作数,也就是只能对一个操作数进行操作,其余三个都是二元操作数,可以和=联合使用,&= |= ^=

    对于Boolean,可以使用& | ^,但是不能使用~(可能是避免和!混淆),此时和逻辑操作符是相同的,只是没有短路效果

    移位运算符:

      操作的对象也是二进制bit,只能用来处理整数

    <<:操作符右侧指定的位数向左移动(低位补0)

    >>:操作符右侧指定的位数向右移动(符号为正,高位补0,符号为负,高位补1)

    >>>:无符号右移,无论正负,高位补0,Java独有的,C/C++没有

      在对char、byte、short进行移位处理,首先会被转化为int类型,得到的结果也是int类型。只有数值的低五位才有效,int类型32位,是2的

    5次方,而long类型处理的结果还是long

    <<=、>=、>>>=:得到结果并赋值

    int i = -1;
    System.out.println(Integer.toBinaryString(i));
    i >>>= 10;
    System.out.println(Integer.toBinaryString(i));
    long l = -1;
    System.out.println(Long.toBinaryString(l));
    l >>>= 10;
    System.out.println(Long.toBinaryString(l));
    short s = -1;
    System.out.println(Integer.toBinaryString(s));
    s >>>= 10;
    System.out.println(Integer.toBinaryString(s));
    byte b = -1;
    System.out.println(Integer.toBinaryString(b));
    b >>>= 10;
    System.out.println(Integer.toBinaryString(b));
    b = -1;
    System.out.println(Integer.toBinaryString(b));
    System.out.println(Integer.toBinaryString(b>>>10));

    结果:

    11111111111111111111111111111111
    1111111111111111111111
    1111111111111111111111111111111111111111111111111111111111111111
    111111111111111111111111111111111111111111111111111111
    11111111111111111111111111111111
    11111111111111111111111111111111
    11111111111111111111111111111111
    11111111111111111111111111111111
    11111111111111111111111111111111
    1111111111111111111111

    >>>=如果对byte和short进行运算,得到可能不是正确的结果,上面可以看到-1右移过后还是-1的结果

    而Integer.toBinaryString(b>>>10);没有赋值,得到的是正确的结果

    类型转换操作符:

    低位自动转化为高位,高位只能强制转换为低位

    截尾和舍入:

      float、double转化成int,是直接舍掉小数部分,不是四舍五入。想要四舍五入,可以使用Math的round()

    提升:

    char、byte、short比int要小,会自动转成int。int和long运算,得到long。

    Java没有sizeof,存在于C/C++ 

  • 相关阅读:
    spark-RDD缓存,checkpoint机制,有向无环图,stage
    spark广播变量
    k8s部署spark
    spark简单安装
    搭建一套高可用的hadoop集群
    JavaScript实现无限级递归树的示例代码
    $.ajax 调用 Asp.Net Core Razor Page 后台代码
    2020蓝桥杯省赛B组第二轮 H 字串分值
    取整函数
    c++按空格分割句子
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10997797.html
Copyright © 2020-2023  润新知