• Java运算符操作及注意点


    1、算术运算

    /:除法运算符的两个运算数都是整数类型,则计算结果也是整数,就是将自然除法的结果截断取整。

    %两个操作数中至少一个是浮点数,允许第二个操作数是0或0.0,但是求余运算的结果是NaN。0或0.0对零以外的任何数求余都将得到0或0.0.

    5%0、5%0.0、5.0%0、0.0%0

    public static void main(String[] args) {
            System.out.println(5%0);  // java.lang.ArithmeticException: / by zero
            System.out.println(5.0%0);  // NaN
            System.out.println(5%0.0);  // NaN
            System.out.println(0.0%0);  // NaN
            System.out.println(0%0.0);  // NaN
            System.out.println(0%0);  // java.lang.ArithmeticException: / by zero
            System.out.println(0%5);  // 0
            System.out.println(0.0%5); // 0.0
        }

    2、赋值运算

    赋值表达式是有值的,赋值表达式的值就是右边被赋的值。如String str2 = str表达式的值就是str。--> 连续赋值成立

    3、比较运算符

    ==(!=):只有当两个引用变量引用的相同类的实例时才可以比较,而且必须这两个引用指向同一个对象才会返回true(!=:两个引用变量均为同一类的实例才可比较

    如果两个对象不是同一个类比较时编译报错吗?会

    public static void main(String[] args) {
            String str = new String("254");
            Integer i = new Integer("254");
            // 编译报错Incompatible(矛盾、不匹配) operand types String and Integer
            System.out.println(str == i); 
        }

    引用类型的缓存问题

    这与java的Integer类的设计有关。

    String类型的缓存:

    String str1 = new String(“string”);
    String str2 = new String(“string”);
    str1 == str2 // false
    String str3 = “hello”;
    String str4 = “hello”;
    str3 == str4 // true

    因为执行String str3 = “hello”;时,系统会创建一个内容为”hello”的String实例,并将这个实例缓存起来,当第二次执行String str4=”hello”时,系统会先检查缓存中是否有一个String实例的内容与这个”hello”直接量(字面量)的字符序列相同,如果从缓存中找到这样一个String实例,系统会直接让这个引用指向这个String实例。

    缓存的意义:缓存是一种非常优秀的设计模式。java将一些创建成本大,需要频繁使用的对象进行缓存,从而提高程序的运行性能。

    4、位运算

    5、移位运算

    移位运算规则

    ●对于低于int类型(如byte,short和char)的操作数总是先自动类型转换为int类型后再移位;

    ●对于int/long类型的整数移位a>>b,当b>32(64)时,先对b做32(64)求余,再移位。

    幂运算:java.lang.Math类的pow() 方法:

    public static double pow(double a, double b);   // ab

    instanceof:在运行时指出对象是否是特定类的一个实例。返回一个布尔值。

    字符串连接符: + 

    优先级问题,优先使用括号。

    &  >  ^  >  |  >  &&  >  ||  >  ?:

    6、扩展的赋值运算符

    byte a = 5; a = a + 5; // 报错,将int型的5赋值给byte型
    
    byte a = 5; a += 5; // 不报错 --> 什么机制?
    b += 1,其实等价于 b = (byte)(b+1);底层会对这个结果进行强转的,所以它编译的时候没事,如果b是127, 那么加1后变成128了,成了int类型了,超过了byte类型的最大范围了,系统会强转,把int类型的 前面三个高位丢弃,丢弃后,如果剩下的一位中,最高位为1,则取反加一,就成了负数了,如果最高位为0,直接把值赋给

    --> 如果可以使用扩展运算符,推荐总使用这种扩展后的运算符

  • 相关阅读:
    兼容IE的滚动条自定义样式
    vue从入门到开发--4--处理http请求
    vue从入门到开发--3-基础语法
    Oracle 扩容表空间
    Oracle 整库备份还原
    Oracle 相关命令
    更改mysql数据库根目录
    关于文件系统
    挂载iscsi存储
    挂载nfs存储
  • 原文地址:https://www.cnblogs.com/datamining-bio/p/13052300.html
Copyright © 2020-2023  润新知