习题解答chapter-01


练习题

—— p35

  • 课后练习题
  1. D 标识符中数字不能开头、不能有非法字符(#)、不能有运算符、不能有关键字
  2. 可以充当swith 语句条件的数据类型:
  • 基本数据类型:byte、short、char、int
  • 包装数据类型:Byte、Short、Character、Integer
  • 枚举类型:Enum
  • 字符串类型:String(JDK7后开始支持)
  1. C 在Java中if等判断条件中不能赋值,否则会编译失败,区别于C/C++
  2. 定义浮点变量s为Float s = 2.3 的错误在于float类型数据后面要加上f,否则系统认定为double类型的数据,而且double类型的数据无法转换为double类型数据
  3. B 语句(i++ == 1)是先比较i是否等于1,再加1,区别于++i;&& 前面的条件为真才执行后面的判断语句
  • 课后问答题
  1. Java数据类型:
  <? java

// 整数类型:byte,short,int,long

    //byte
    System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
    System.out.println("包装类:java.lang.Byte");
    System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
    System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
    System.out.println();

    //short
    System.out.println("基本类型:Short 二进制位数:" + Short.SIZE);
    System.out.println("包装类:java.lang.Short");
    System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
    System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
    System.out.println();

    //int
    System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
    System.out.println("包装类:java.lang.Integer");
    System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
    System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
    System.out.println();

    //long
    System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
    System.out.println("包装类:java.lang.Long");
    System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
    System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
    System.out.println();

// 浮点型:float,double

    //float
    System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
    System.out.println("包装类:java.lang.Float");
    System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
    System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
    System.out.println();

    //double
    System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
    System.out.println("包装类:java.lang.Double");
    System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
    System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
    System.out.println();

// 字符类型:char 半角单引号

    System.out.println("基本类型:char 二进制位数:"
            + Character.SIZE);
    System.out.println("包装类:java.lang.Character");
    // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
    System.out.println("最小值:Character.MIN_VALUE="
            + (int) Character.MIN_VALUE);
    // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
    System.out.println("最大值:Character.MAX_VALUE="
            + (int) Character.MAX_VALUE);


    //String为字符串类型,不是基本数据类型,本质上是一个类,只是其对象较为特殊
    //初始化的两种方式
    String greeting0 = "Good Morning!\n";
    System.out.print(greeting0);
    String greeting1 = "Good Night!\n";
    System.out.print(greeting1);

// 布尔类型:boolean 只有true和false,不对应任何整数值,不允许将数值转化为boolean类型

    boolean n = true;
    System.out.println("n为布尔类型:" + n);
  1. Java基本数据类型转换:
  • 自动类型数据转换:

只能从低级转化为高级 byte、short、char < int < long < float < double

    byte b1 = 1;
    double b2 = 3.0;
    System.out.println("自动类型转换:" + (short)b1 / b2);

b1在short的作用下转换为short类型,但是在后面被b2的double类型自动转换为double类型

  • 强制类型转换:
    double b3  = 3.14;
    byte b4 = (byte)b3;
    System.out.println(b3 + " " + b4); //结果为 3.14 3
  1. 包装类存在的意义:
  • 基本数据类型不是对象,在一些场合不能直接使用(eg:某些类方法参数必须是对象类型),需要转化为对应的包装类对象才能使用
  • 包装类的一些静态方法可实现不同数据类型的转化,eg:将字符串类型的数字转化为整型,可以通过 int a = Integer.parseInt("123") 来完成,而将整型转化为字符串类型则可通过String c = String.valueOf(123来完成
  • 包装类的静态属性中含有相应数据类型的范围,eg:Double.NEGATIVE_INFINITY(负无穷);Double.POSITIVE_INFINITY(正无穷);Double.NaN(非数类型)……(参照上面介绍基本类型的代码)
  • 转换方法:
  1. 基本数据类型转化为包装类对象通过构造方法来完成,eg:
    Float vari = new Float(3.14)
  2. 从包装类对象那里得到其代表的基本数据值需要调用该对象的相应方法,如上面的vari可以通过调用floatVaue()方法得到一个float类型的值
  1. int和Integer的区别和转换:
  • 区别:
  1. Integer是int的包装类,int是Java的一种基本数据类型
  2. Integer变量必须实例化后才能使用,而int变量不需要
  3. Integer实际是对象的引用,当new一个Integer时,实际上时生成一个指针指向此对象;而int则是直接存储数据值
  4. Integer的默认值是null,int的默认值是0
    参考:[]
  • 转换方法:
  1. 基本数据类型转化为包装类对象通过构造方法来完成,eg:
    Integer vari = new Integer(3.14)
  2. 从包装类对象那里得到其代表的基本数据值需要调用该对象的相应方法,如上面的vari可以通过调用intVaue()方法得到一个int类型的值
  1. 逻辑运算符&和&&的区别,逻辑运算符&和位运算符&的区别
  • 逻辑运算符&和&&:
  • & eg: x&y x,y都为true时,结果为真
  • && eg: x&&y x,y都为true时,结果为真
  • &两边的条件都需要判断一下,而&&左边的条件若为假,直接结束,不用再进行判断右边的条件,加快了运算速度
  • 逻辑运算符&和位运算符&:

位运算符&是针对两个数的运算,将表达式两边的数字转换成相同位数的二进制字符,对相同的位进行比较,如果该位全为1,则返回1,其余返回0。eg:
13:1101
4:0100
使用按位与&返回值是0100 === 4

  1. Java中跳出多重循环的语句:
  • Java中break跟C/C++中一样跳出当前循环,continue也是一样的跳回当前循环的开始,并继续下次循环。Java中没有C/C++中的goto语句任意跳向当前代码块的任意位置,但是break和continue增加了类似于goto语句的跳出多层循环的功能。
    int i, j, temp = 1;
    lab: for(int k = 0; k < 10; k++){
        for(i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                temp++;
                if (temp > 15)
                    break lab;
            }
        }
    }
    System.out.println(temp);

运行结果为16,如果将lab放在第二个循环结果为25,如果放在第三个循环结果为114

    lab:for(int k = 0; k < 10; k++){
        for(i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                temp++;
                if (temp > 15)
                    continue lab;
            }
        }
    }
    System.out.println(temp);

结果为25,如果放在第二个循环结果为114,如果放在第三个循环结果为1001

  //综合
    int i = 0;
    outer:
    while(true) {
        System.out.println("Outer while loop");
        while(true) {
            i++;
            System.out.println("i = " + i);
            if(i == 1) {
                System.out.println("continue");
                continue;
            }
            if(i == 3) {
                System.out.println("continue outer");
                continue outer;
            }
            if(i == 5) {
                System.out.println("break");
                break;
            }
            if(i == 7) {
                System.out.println("break outer");
                break outer;
            }
        }
    }

结果为:
Outer while loop
i = 1
continue
i = 2
i = 3
continue outer
Outer while loop
i = 4
i = 5
break
Outer while loop
i = 6
i = 7
break outer

  • 使用判断条件的方式退出多层循环
   boolean b = true;
    for(int i = 0; i < 10 && b; i++){
        for(int j = 0; j < 10 && b;j++){
            if(j > 3){
                System.out.println("i="+i);
                System.out.println("j="+j);
                b = false;
            }
        }
    }

结果为 i = 0,j = 4