运算符

运算符尽管很基础,但也存在一些细小的知识点会遗漏,不清楚的情况。做记录,以备遗忘吧。

算数运算符中的 / 和 %

对于整型数据

整型数据的除法和取余运算很简单,非常的直观

  • 17 / 0:会抛出java.lang.ArithmeticException 异常
  • 0 / 0 :会抛出java.lang.ArithmeticException 异常
  • 0 % 17:等于 0
  • 17 % 0:会抛出java.lang.ArithmeticException 异常,因为取余就相当于先进行了除数运算,再拿到余数作为计算结果

对于实型数据

实型数据可就复杂了哦,但是实型数据除了一个正无穷一个负无穷的情况,其他都是 NaN,好记的很啊!NaN 全称是 not a number ,源码中是如下定义的:public static final double NaN = 0.0d / 0.0;

  • 17.0 / 0 :返回结果为 Infinity,正无穷
  • -17.0 / 0:等于 -Infinity,负无穷
  • 0 / 0.0:返回结果为 NaN
  • 0.0 % 0:返回结果为 NaN
  • 17.6 % 4:整数取余,再加上剩下的小数

运算符中的 +

作为算数运算符的加法

byte、short、char 这三种数据类型在参与运算的时候,可能会被自动转换为 int 类型的数据参与运算,具体规则如下:

  • 单目运算不会改变类型,j++
  • 复合双目运算不会改变类型,j+=1
  • 双目运算会改变类型,j = j + 1

作为字符串连接符

String s = "hello" + "world",这时候,体现的是作为字符连接符的作用。在方法区的常量区开辟内存空间!

循环结构

循环结构中有一个特例,即使用 break / continue 和 label 标签配合使用来结束循环代码块。单独使用 break 只能跳出本层循环,但配合使用标签可以跳出更外层的循环。是跳出标签指定范围内的这个代码块,光标直接跳到这个代码块的结束位置。这种方式更灵活,代码可读性也高。

public static void main(String[] args) {
    label1:  
        while (true) {
            label2:
            for (int i = 0; i <= 10; i++) {  
                System.out.println("i=" + i);  
                if (i == 5) {  
                    // 跳出 label1 标签指定的代码块结束位置
                    break label1;
                }  
            }  
            System.out.println("++++++++++++++");  
        }
}
            

你可能感兴趣的:(运算符)