动手动脑的问题以及课后实验性的问题2023.9.15

发布时间 2023-09-15 03:05:48作者: cvjj

一、问:1、仔细阅读示例:EnumTest.java,运行它,分析运行结果

         2、你能得到什么结论?你掌握了枚举类型的用法了吗?

  答:源代码:


public class EnumTest {

public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用同一个对象?
System.out.println(s==t); //
//是原始数据类型吗?
System.out.println(s.getClass().isPrimitive());
//从字符串中转换
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//列出它的所有值
for(Size value:Size.values()){
System.out.println(value);
}
}

}
enum Size{SMALL,MEDIUM,LARGE};
运行结果为:

false
false
true
SMALL
MEDIUM
LARGE

进程已结束,退出代码为 0


values() 该方法可以将枚举类型成员以数组的形式返回 枚举类型名称.values()
valueOf() 该方法可以实现将普通字符串转换为枚举实例 枚举类型名称.valueOf("ABC")

第一条输出语句是判断了对象s、t是否引用相同的对象;第二条输出语句是判断s是否是原始数据;第3、4、5条输出语句是输出引用的对象。

结论:枚举类型安全,具有紧凑有效的数据定义,可以和程序其他部分完美交互,运行效率高。对于枚举类型的运用更加熟练了。枚举类型可以用”==“判断

二、问:阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

  答:反码:反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。

    补码:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

    原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小;

三、问:Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写-些测试代码,就象本示例- -样,有意识地在不同地方定义一些同名 变量,看看输出的到底是哪个值。

  答:每个变量都有一个”有效“的区域(称为”作用域“),出了这个区域,变量将不再有效

四、问:

  答:源代码:




public class TestDouble {

public static void main(String args[]) {
System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
System.out.println("4.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}
输出结果:

0.05 + 0.01 = 0.060000000000000005
1.0 - 0.42 = 0.5800000000000001
4.015 * 100 = 401.49999999999994
123.3 / 100 = 1.2329999999999999

进程已结束,退出代码为 0

结论:说明数据类型转换之后有时会丢失精度,有时会与原来的结果不同。

五、问:

  答:第一条语句的输出结果是:X+Y=100200

    第二条语句的输出结果是:300=X+Y

    第一行语句相当于是作为字符串输出数据,并没有进行运算,第二行语句则是先运算再输出字符串