java核心技术卷中的细节(带下划线的数字、带标签的break、大数)

259 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

带下划线的数字表示

从java7开始,可以为数字字面量加下划线,如: 用1_000_000或者(0b1111_0100_0010_0100_0000)表示100万。

验证一下:

  • 1_000_000
    public static void main(String[] args) {
        int num = 1_000_000;
        System.out.println("1_000_000 = " + num);
    }

在这里插入图片描述

  • 0b1111_0100_0010_0100_0000
    public static void main(String[] args) {
        int num_0b = 0b1111_0100_0010_0100_0000;
        System.out.println("0b1111_0100_0010_0100_0000 = " + num_0b);
    }

在这里插入图片描述

带标签的break

break可以用于switch或者是循环语句中,以结束一个switch语句或者结束当前所在的循环语句。

你是否见过这样的break(==带标签的break==):

    public static void main(String[] args) {
        int n=0;

        addN:
        for(int i=0;i<100;i++){
            for(int j=0;j<100;j++){
                ++n;
                if(n==20){
                    break addN;
                }
            }
        }

        System.out.println(n);
    }

在这里插入图片描述

带标签的break通常用于多层循环嵌套中,在某一个循环前面加一个标签,在退出循环的时候用break+标签跳出多层循环到标签处,并且不会再次进入到刚才的循环中。

使用普通的break执行上述程序:

    public static void main(String[] args) {
        int n=0;
        
        for(int i=0;i<100;i++){
            for(int j=0;j<100;j++){
                ++n;
                if(n==20){
                    break;
                }
            }
        }

        System.out.println(n);
    }

在这里插入图片描述 ==普通的break语句只能跳出单层循环,而带标签的break语句可以跳出多层循环(即跳回到标签所在的位置,但不会再次进入循环)。==

事实上,可以将标签应用到任何语句,甚至可以将其应用到if语句或者块语句,如下所示:

label:
{
  if(condition) break label;
}
// break跳到这里

大数

如果基本的证书和浮点数精度不能满足需求,那么可以使用java.math包中的两个类:BigInteger、BigDecimal。

这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal类实现任意精度的浮点数运算。

例如:

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("123456789987654321123456789");
        System.out.println("BigInteger:"+bigInteger);

        BigDecimal bigDecimal = new BigDecimal("12345678998.7654321123456789");
        System.out.println("BigDecimal:"+bigDecimal);
    }

在这里插入图片描述 使用静态的valueOf()方法可以将普通的数值转换为大数。

BigInteger n = BigInteger.valueOf(10000);

但是,我们熟悉的 “+ - * / ”算数运算符不能处理大数,而要适应大数类提供的add()、substract()、multiply()、divide()方法。

例如:

    public static void main(String[] args) {

        BigInteger a = new BigInteger("123456789");
        BigInteger b = new BigInteger("987654321");

        System.out.println("a = " + a);
        System.out.println("b = " + b);

        BigInteger c = a.add(b);    //c = a + b
        System.out.println("a + b = " + c);

        BigInteger d = a.multiply(b.add(c));    //d = a * (b + c)
        System.out.println("a * (b + c) = " + d);


    }

在这里插入图片描述